2012-03-08 4 views
4

Je veux que mes utilisateurs de faireRspec + Rails: POST-paramètre d'URL au contrôleur

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

et organiser que le POST atteint le contrôleur "nomducontroleur" comme

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

Ou, en fait, je peut travailler avec n'importe quel autre aspect au contrôleur; le fait est que ce dernier mot dans l'URL ("v1") doit être mis à la disposition du contrôleur pour une utilisation plutôt similaire à p2/v2 et p3/v3.

Et, j'ai besoin de tester cela avec Rpec. Plus précisément:

rspec 2.6.4 
rails 3.0.9 
ruby 1.9.2 

J'utilise une route

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

Et cette règle rspec fonctionne:

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

Mais je ne peux pas comprendre comment y publier un message (à partir de la spécification du contrôleur). Aucun de ces travaux:

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

Quel est l'appel du contrôleur par votre test sur le journal de test? – shingara

Répondre

1

Pour votre exemple:

intérieur controllername_controller_spec.rb

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

Essentiellement, il suffit de mettre ensemble tous les paramètres que vous auriez dans le chemin et ceux que vous voulez fournis dans le corps de la demande

Questions connexes