2013-12-12 2 views
8

Для моих тестов мне нужен контроллер, где я могу установить свои собственные параметры. С параметрами Я имею в виду тот, который вы получите при вызове controller.paramsКак заглушить параметры с контроллера?

{"action"=>"show", 
"controller"=>"merchants", 
"wine_id"=>"1", 
"id"=>"346343"} 

Проблема заключается в том, я не знаю, что правильный путь для заглушек здесь. Есть три явления:

  • controller.request.env['action_dispatch.request.path_parameters']
  • controller.params
  • controller.url_options[:_recall]

Во всех трех тех же информация хранится, но что Сопряженный способ установить эти значения?

+0

Вы имеете в виду конкретно в своем тестовом наборе? – Donovan

+0

Вы говорите, что получаете доступ к параметрам с помощью всех трех методов? –

+0

@Donovan Да @PeterAlfvin Нет. Кажется, в итоге все сводится к 'controller.request.env ['action_dispatch.request.path_parameters']', глядя на исходный код. –

ответ

12

Обычный способ доступа к параметрам: controller.params. Поэтому я бы посоветовал вам заглушить параметры

controller.stub(:params).and_return({:param1 => "value", :param2 => "value"}) 
+0

Да, от того, который работает в контроллере, определенно, но Rails сам перебирает параметры controller.request.path_parameters при работе с параметрами внутри. Метод заглушки очень удобен, не знал этого. –

+0

Я помещаю это в свой тест RSpec в примере, но я получаю «LocalJumpError: no block given от C: /Ruby23-x64/lib/ruby/gems/2.3.0/gems/rspec-rails -3.5.2/lib/rspec/rails/example/controller_example_group.rb: 77: в 'class_exec'' –

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