2009-02-09 3 views
20

Arbeiten mit Test :: Unit und Shoulda. Versuchen, Users.create zu testen. Mein Verständnis ist, dass Rails Formulare für ein Objekt wie folgt sendet:Wie geben Sie POST-Parameter in einem Rails-Test an?

user[email] 

Welche wird in Ihrer Aktion Hash, oder?

params[:user][:email] 

OK, also in meinem Test habe ich versucht ...

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

und

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

In beiden Fällen immer wieder in meinem Handeln, params[:user] ist gleich Null.

Antwort

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

Die allgemeine Form für alle Testmethoden erhalten, Post, setzen, löschen Sie sind wie folgt:

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

Und in Tests, wird das params-Hash in params Ihrer Controller-Aktion direkt gesendet ohne irgendeine Übersetzung. Selbst wenn Sie Integrationstests durchführen, sollten Sie diese Zeichenkette nicht unbedingt nach Params übersetzen, da dies sehr gut durch die Rails Framework Tests abgedeckt wird. Außerdem akzeptieren alle Testmethoden, die Params benötigen, auf diese Weise einen Hash, ohne dass Sie sich beschweren müssen.

+0

dies auch ist gonna Arbeit: „post: erstellen, {: E-Mail => foo‘ @ bar.com '} "und von der Steuerungsseite aus haben Sie: params [: email] gibt Ihnen' [email protected] ' – nisevi

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

In diesem Fall params [: post] ist {}, params [: user] ist {: email => 'abc @ abcd'}, params [: user] [: E-Mail] ist ' abc @ abcd '.

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

In diesem Fall params [: post] [: user] [: email] ist 'abc @ abcd'

Verwandte Themen