unit-testing rspec cucumber integration-testing rspec-stories

unit testing - RSpec vs Cucumber(historias RSpec)



unit-testing integration-testing (6)

¿Cuándo debo usar las especificaciones para la aplicación Rails y cuándo Cucumber (former rspec-stories)? Sé cómo funcionan ambos y activamente las especificaciones, por supuesto. Pero todavía se siente raro usar Pepino. Mi punto de vista actual sobre esto, es que es conveniente usar Cucumber cuando está implementando la aplicación para el cliente y no comprende cómo se supone que todo el sistema funciona todavía.

Pero, ¿y si estoy haciendo mi propio proyecto? La mayor parte del tiempo, sé cómo interactúan las partes del sistema. Todo lo que necesito hacer es escribir un montón de pruebas unitarias. ¿Cuáles son las posibles situaciones en las que necesitaría Pepino entonces?

Y, como segunda pregunta correspondiente: ¿tengo que escribir especificaciones si escribo historias de pepino? ¿No sería una doble prueba de la misma cosa?


Pero, ¿y si estoy haciendo mi propio proyecto? La mayor parte del tiempo, sé cómo interactúan las partes del sistema. Todo lo que necesito hacer es escribir un montón de pruebas unitarias. ¿Cuáles son las posibles situaciones en las que necesitaría Pepino entonces?

Aún necesitas Pepino. Lo necesita para documentar cómo ve que el sistema funciona, y lo necesita para asegurarse de que no haya roto la funcionalidad cuando cambie las cosas.

En otras palabras, necesitas historias de Pepino por las mismas razones que necesitas pruebas unitarias, solo trabajan en un nivel más alto de abstracción.



Piénselo como un ciclo:

Escriba su función de Pepino, luego, mientras desarrolla las piezas para esa característica, escriba las especificaciones para completar los componentes individuales. Continúe completando las especificaciones hasta que haya escrito suficiente funcionalidad para que la característica pase, luego escriba su próxima función.


Si aún no lo has hecho, tal vez quieras consultar el excelente artículo de Dan North, What''s in a Story? como punto de partida

Tenemos dos usos principales para las historias de Pepino. En primer lugar, debido a que la forma de la historia es muy específica, ayuda a enfocar la articulación del dueño del producto de las características que quiere construir. Este es el uso de historias de "token para una conversación", y sería valioso si implementamos las historias en código o no. Segundo, cuando el proceso está funcionando lo suficientemente bien como para que tengamos historias completas antes de comenzar a escribir la característica (más de un ideal que buscamos que una realidad diaria), tiene sus criterios de aceptación explicados claramente y usted sabe exactamente qué y cómo mucho para construir.

En nuestro trabajo de Rails, las historias de Pepino no sustituyen a las pruebas unitarias de rspec. Los dos van de la mano. En la práctica, las pruebas unitarias tienden a impulsar el desarrollo de los modelos y controladores, y las historias tienden a impulsar el desarrollo de las vistas (tendemos a no escribir rspec para nuestros puntos de vista) y proporcionan una buena prueba de la aplicación como un todo desde el la perspectiva del usuario

Si trabajas solo, el aspecto de comunicación puede no ser tan interesante para ti, pero las pruebas de integración que obtienes de Cucumber podrían ser. Si aprovecha webrat , escribir Cucumber puede ser rápido y sencillo para gran parte de su funcionalidad básica.


Una historia de Cucumber es más una descripción del problema general que está resolviendo su aplicación, en lugar de si funcionan fragmentos de código individuales (es decir, pruebas unitarias).

Como describe Abie, es casi una lista de requisitos que debe cumplir la aplicación, y es muy útil para la comunicación con su cliente, además de ser directamente comprobable.


Hoy en día puedes usar rspec con Capybara y Selenium Webdriver y evitar tener que construir y mantener todos los analizadores de historias de Cucumber. Esto es lo que recomendaría:

  1. Escribe tu historia
  2. Usando RSpec, crearía una prueba de integración ex: spec / integrations / socks_rspec.rb
  3. Luego crearía una prueba de integración que incluye una nueva descripción y bloque para cada escenario
  4. Luego, implementaría la funcionalidad mínima requerida para obtener la prueba de integración y, mientras más atrás (en controladores y modelos, etc.), TDD en controladores y modelos.
  5. A medida que vuelves, tu prueba de integración debería pasar y puedes continuar agregando pasos para la prueba de integración
  6. repetir

Una cosa a tener en cuenta, sin embargo, es que el controlador y las pruebas de integración se superponen, lo que puede no ser necesario, por lo que debe usar su mejor criterio para no perder el tiempo.

Además, una vez que encuentres tu ritmo, te resultará más agradable desarrollar usando BDD, hasta entonces no te sentirás culpable si no sientes que lo estás haciendo perfecto y no lo pienses demasiado. ¡Lo haras bien!