2012-03-08 5 views
4

Я хочу, чтобы мои пользователи сделатьRspec + Rails: POST URL-параметров в контроллер

POST /controllername/v1 
{ 
    "p2":"v2", 
    "p3":"v3" 
} 

и договоритесь, что POST достигает контроллера "controllername" как

params={ :p2 => "v2", :p3 => "v3" } 
p1=v1 

Или, на самом деле, я может работать с любым другим внешним видом контроллера; дело в том, что последнее слово в URL-адресе («v1») должно быть доступно контроллеру для использования в точности с p2/v2 и p3/v3.

И, мне нужно проверить это на Rpec. В частности:

rspec 2.6.4 
rails 3.0.9 
ruby 1.9.2 

Я использую маршрут

match '/controllername/:p1' => 'controllername#create' 

И это Rspec правило работает:

it 'should route to :create' do 
    assert_routing({ :path => '/controllername/foofoo', 
        :method => :post }, 
       { :controller => "controllername", 
        :action => 'create', 
        :p1 => 'foofoo' }) 
end 

Но я не могу понять, как разместить в нем (от контроллер). Ни одна из этих работ:

post :create, parameters 
post :create, parameters, 'foofoo' 
post :create, parameters, :p1 => 'foofoo' 
post :create, :p1 => 'foofoo', parameters 
+0

Что такое вызов контроллера по вашему тесту в тестовом журнале? – shingara

ответ

1

Для примера:

Внутри controllername_controller_spec.rb

post :create, :p1 => "foo", :p2 => "bar", :p3 => "baz" 

По сути, просто собрать все параметры, которые вы имели бы в пути и те, которые вы хотите предусмотрено орган запроса

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