Я тестирую контроллер, и когда я отправляю данные формы, некоторые из них входят в контроллер как строка, а не хэш, которого я ожидаю.Rspec Rails controller submit form params URI, а не hash
def send_request(params={})
patch :update, params.merge(:id => @company.id)
end
describe 'should_receive' do
let(:test_params) do
{
"utf8"=>"✓",
"_method"=>"patch",
"button"=>"",
"company"=>
{ "label_ids"=>[""],
"customer_users_attributes"=>{"0"=>{"id"=>"3", "is_primary"=>"true"}},
"baselines_attributes"=>{"0"=>{"label_ids"=>[""], "benchmark_ids"=>[""], "id"=>"1"}}},
"action"=>"update",
"controller"=>"admin/companies",
}
end
after(:each) do
send_request(test_params)
end
it { @company.should_receive(:update).with(test_params).and_return(true) }
Ошибка при выполнении теста:
Failure/Error: patch :update, params.merge(:id => @company.id)
NoMethodError:
undefined method `has_key?' for "baselines_attributes%5Bsite_url%5D=site_url":String
в PARAMS только перед сбоем:
{"utf8"=>"✓",
"_method"=>"patch",
"button"=>"",
"company"=>
"baselines_attributes%5B0%5D%5Bbenchmark_ids%5D%5B%5D=&baselines_attributes%5B0%5D%5Bid%5D=1&baselines_attributes%5B0%5D%5Blabel_ids%5D%5B%5D=&customer_users_attributes%5B0%5D%5Bid%5D=3&customer_users_attributes%5B0%5D%5Bis_primary%5D=true&label_ids%5B%5D=",
"action"=>"update",
"controller"=>"admin/companies",
"id"=>"1"}
В Титулы в том же месте, когда форма передается через браузер :
{"utf8"=>"✓",
"_method"=>"patch",
"button"=>"",
"company"=>
{"label_ids"=>[""],
"customer_users_attributes"=>{"0"=>{"id"=>"3",
"is_primary"=>"true"}},
"baselines_attributes"=>{
"0"=>{"label_ids"=>[""], "benchmark_ids"=>[""], "id"=>"1"}}},
"action"=>"update",
"controller"=>"admin/companies",
"id"=>"1"}
в тесте все в параметрах [: company] - это кодированная URI строка, тогда как в реальном коде она поступает правильно как хэш.
Как я могу получить данные теста для правильной обработки?
Update
Рубин 2.2.0
Соответствующие драгоценные камни:
- рельсы (4.0.13)
- RSpec-сердечник (2.14.8)
- nested_form (0,3.2)
Можете ли вы разместить свою разметку? Вы используете 'simple_form'? – richessler
Я думаю, что размещение разметки было бы отвлечением, но я добавлю подробности о драгоценных камнях/версиях. Код работает правильно, это проблема, проблема. – agbodike