параметр "призрак" передается в контроллер - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующий тест:

it 'will pass with valid pageConfig json structure' do 
  document = create(:document, :complete, :belongs_to_user, user_id: @user.id, workspace_id: @workspace.id)
  put :update, params: {id: document.id, pageConfig: {size: {width: 1, height: 1}, margin: {top: 1, bottom: 1, left: 1, right: 1}}, workspace_id: @workspace.id}, as: :json
  expect(document.reload.page_config).to eq({"size": {"width": 1, "height": 1}, "margin": {"top": 1, "left": 1, "right": 1, "bottom": 1}})
end 

при отладке конечной точки update это параметры:

<ActionController::Parameters {"pageConfig"=>{"size"=>{"width"=>1, "height"=>1}, "margin"=>{"top"=>1, "bottom"=>1, "left"=>1, "right"=>1}}, "workspace_id"=>1, "id"=>"1", "format"=>"json", "controller"=>"documents", "action"=>"update", "document"=>{"workspace_id"=>1}} permitted: false>

, как вы можете видеть, ширина, высота иВсе значения workspace_id integer , как и должно быть, но тесты не пройдены из-за проверки:

Validator of Parameters - Unknown parameter document

последняя запись в параметрах - document =>, которую я вообще не предоставил.

когда я изменяю с as: :json на format: :json, теперь параметр document пропал (что я хочу), но все остальные параметры анализируются как строка:

<ActionController::Parameters {"pageConfig"=>{"margin"=>{"bottom"=>"1", "left"=>"1", "right"=>"1", "top"=>"1"}, "size"=>{"height"=>"1", "width"=>"1"}}, "workspace_id"=>"1", "id"=>"1", "format"=>"json", "controller"=>"documents", "action"=>"update"} permitted: false>

и теперь другие проверки не пройдены, потому что они являются строкой.

Как мне заставить его работать, используя as: :json и заставить document исчезнуть?

Я использую Rails 5.2.0 с RSpec 3.8.0

...