2015-12-09 2 views
2

Я тестирую контроллер, и когда я отправляю данные формы, некоторые из них входят в контроллер как строка, а не хэш, которого я ожидаю.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)
+0

Можете ли вы разместить свою разметку? Вы используете 'simple_form'? – richessler

+0

Я думаю, что размещение разметки было бы отвлечением, но я добавлю подробности о драгоценных камнях/версиях. Код работает правильно, это проблема, проблема. – agbodike

ответ

0

Почему вы не используете FactoryGirl для создания атрибутов?

+0

Мы используем FactoryGirl в другом месте, но я не написал тест. Я предполагаю, что автор просто тестирует простые функции и не хочет создавать полный набор объектов для проверки этого. Как здесь FactoryGirl? – agbodike

Смежные вопросы