2012-08-03 23 views
5

Soy bastante nuevo en los rieles y trato de hacer las cosas de la manera "correcta" mediante la implementación de pruebas desde el principio. Ayer utilicé el generador de andamios para crear mi primera configuración de modelo/vista/controlador. Si bien me dijeron que realmente no debería usar andamios, fue útil para poder aprender cómo está estructurado el código de Rails.Al escribir pruebas de RSpec con rieles, ¿qué debe ir en la carpeta especificaciones/solicitudes frente a especificaciones/controladores?

La única cosa que noté fue que el RSpec generada automáticamente se colocó todo en el spec/carpeta de controladores. Sin embargo cuando vi this episode of Railscasts, me di cuenta de que él utilizó el comando

rails generate integration_test [test_name] 

que colocó un archivo de prueba individual en la especificación /carpeta Peticiones. Sin embargo, todas las pruebas que escribió interactuaron con los controladores. Lo que intento determinar es la mejor práctica para dónde almacenar estas pruebas.

¿Cuándo debe una tienda realizar pruebas en la carpeta de especificaciones/solicitudes y cuándo debe una tienda realizar pruebas en la carpeta de especificaciones/controladores? ¡Cualquier comentario sería muy apreciado!

Respuesta

6

Actualmente son 2 tipos de pruebas. En la carpeta del controlador debe crear pruebas para probar las acciones del controlador, en la carpeta de solicitudes debe colocar las pruebas para interactuar con las vistas, lo que realmente probará todas las partes de la aplicación, y es por eso que se denomina prueba de integración.

Aquí hay algunos artículos sobre esos dos tipos de pruebas.

http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html

http://everydayrails.com/2012/04/24/testing-series-rspec-requests.html

0

especificaciones controlador de ensayo la invocación de una sola acción del controlador. Por lo general, no mostrarás las vistas (aunque puedes activarlas), también es bastante común eliminar un montón de código de modelo. La única interacción que tiene con el código bajo prueba es invocar una sola acción de controlador. Podría pensar en estos como pruebas unitarias para los controladores.

Las especificaciones de solicitud, por otro lado, prueban toda la pila (enrutamiento, controladores, vistas, modelos, etc.). En lugar de solo invocar una sola acción de controlador, realiza acciones más cercanas a lo que haría un usuario: visitar una página, completar un formulario, hacer clic en un botón. A menudo esto abarcará múltiples acciones/controladores. Por ejemplo, puede escribir una especificación de solicitud que lleve a un usuario a través del proceso de agregar un producto a un carrito y luego seguir los diversos pasos involucrados en el proceso de pago.

Normalmente usas el capibara (creo que aún puedes usar webrat) para interactuar con las páginas que generas. Con un controlador de capibara adecuado, también se ejecutará javascript en la página, por ejemplo, puede probar que su javascript del lado del cliente hace lo correcto con el json producido por su controlador (aunque puede considerar escribir especificaciones de JavaScript si tiene mucho de eso)

Cuestiones relacionadas