2009-02-09 5 views
20

Utilisation de Test :: Unit et Shoulda. Essayer de tester Users.create. Je crois comprendre que les formes Rails envoyer params pour un objet comme celui-ci:Comment spécifier les paramètres POST dans un test Rails?

user[email] 

qui se transforme en hachage dans votre action, non?

params[:user][:email] 

OK, donc dans mon test, je l'ai essayé ...

setup { post :create, :post => { 'user[email]' => '[email protected]' } } 

et

setup { post :create, :post => { :user => { :email => '[email protected]' } } } 

Dans les deux cas, plus dans mon action, params[:user] est nul.

Répondre

43
post :create, :user => { :email => '[email protected]' } 

La forme générale pour toutes les méthodes d'essai de faire, après, mettre, supprimer sont les suivants:

def post(action_name, params_hash = {}, session_hash = {}) 

Et dans les tests, le hachage params obtient directement envoyé dans params de votre action contrôleur sans traduction d'aucune sorte. Même en faisant des tests d'intégration, vous n'avez pas vraiment besoin de tester cette chaîne pour la traduction des params car elle est très bien couverte par les tests du framework rails. De plus, toutes les méthodes de test qui nécessitent des paramètres acceptent un hachage de cette manière sans se plaindre, ce qui rend les choses plus faciles pour vous.

+0

c'est aussi va travailler: « post: créer, {: email => « foo @ bar.com '} "et du côté du contrôleur, vous aurez: params [: email] vous donne' [email protected] ' – nisevi

6
post :create, {:post => {}, :user => {:email => '[email protected]'} }

Dans ce params cas [: post] est {}, params [: user] est {: email => 'abc @ abcd'}, params [: user] [: email] est ' abc @ abcd '.

post :create, {:post => {:user => {:email => '[email protected]'} } }

Dans ce cas params [: Annonce] [: user] [: email] est 'abc @ abcd'

Questions connexes