2009-02-09 18 views
20

Trabajando con Test :: Unit y Shoulda. Intentando probar Users.create. Entiendo que los formularios de Rails envían params para un objeto como este:¿Cómo se especifican los parámetros de POST en una prueba de Rails?

user[email] 

¿Qué se convierte en hash en su acción, ¿verdad?

params[:user][:email] 

OK, así que en mi prueba he intentado ...

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

y

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

En ambos casos, otra vez en mi acción, params[:user] es nula.

Respuesta

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

La forma general para todos los métodos de ensayo de conseguir, POST, PUT, eliminar son los siguientes:

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

Y en las pruebas, el hash params es enviado directamente en params de la acción del controlador sin traducción de ningún tipo. Incluso haciendo pruebas de integración, realmente no debería necesitar probar esta traducción de cadena a params, ya que está cubierta muy bien por las pruebas de framework de rails. Además, todos los métodos de prueba que necesitan parámetros aceptan un hash de esta manera sin quejarse para facilitar las cosas.

+0

esto también va a funcionar: "mensaje: crear, {: email => 'foo @ bar.com '} "y desde el lado del controlador tendrá: params [: email] le da' [email protected] ' – nisevi

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

En este caso params [: post] es {}, params [: el usuario] {: email => 'abc @ ABCD'}, params [: usuario] [: e-mail] se ' abc @ abcd '.

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

En este caso params [: mensaje] [: user] [: email] es 'abc @ ABCD'

Cuestiones relacionadas