useful tag name keywords importantes ejemplo copyright ruby cucumber bdd

ruby - tag - Buenos ejemplos de pepino en la naturaleza?



seo meta tags (8)

Esta no es una respuesta directa, pero estoy en desacuerdo con una premisa en su pregunta, pero tengo una solución, así que daré mi opinión de todos modos.

uno que otros usuarios de Pepino considerarían idiomático y libre de antipatrones

Esta declaración, creo, lamentablemente es imposible de satisfacer.

Aquí está Brandon Keepers of CollectiveIdea tomando una posición común de que debe esforzarse hacia pasos genéricos y reutilizables , lo cual tiene sentido desde una perspectiva general de "No repetir".

Sin embargo, aquí está Aslak Hellesøy, el autor de Cucumber, que toma una opinión común (pero mutuamente excluyente) de que debe esforzarse hacia pasos específicos del escenario , lo que tiene sentido desde la perspectiva de "¿por qué Pepino en absoluto?"

A partir de "The Training Wheels Came Off" enlazado anteriormente, Aslak hace dos escenarios de ejemplo para contrastar de forma conmovedora los dos estilos: pasos reutilizables versus scenario-specific .

Después de años de usar Pepino en ambos estilos, y teniendo en cuenta el dilema anterior, estas son mis conclusiones:

  1. Los pasos reutilizables se convierten en una pesadilla de mantenimiento, ya que necesita soportar definiciones de paso más complejas y, al mismo tiempo, evitar conflictos de nombres.
  2. Los pasos específicos del escenario son preferidos para la legibilidad y la simplicidad, pero también se convierten en una pesadilla de mantenimiento debido a conflictos de nombres.

Por lo tanto, he decidido que Cucumber está actualmente roto, y el Capybara simple en la parte superior de su marco de pruebas de unidad favorito es el más flexible.

Cucumber podría, si así lo desea, agregar contextos de escenarios, escenarios específicos de características, espacios de nombres de escenarios, etc. de forma tal que pueda abarcar sus escenarios de alguna manera, por función, rol de usuario, lo que tenga sentido, y reducir en gran medida los conflictos de nombres para realizar pasos específicos de escenario verdaderamente viable. En ese momento, creo que habrá un claro ganador estilístico. Hasta entonces, siempre habrá esta tensión de necesitar abstraer sus pasos para evitar nombrar conflictos, en lugar de querer mantenerlos específicos de los escenarios para simplificar y facilitar la lectura.

Un proyecto alternativo que intenta abordar estas deficiencias es Spinach , pero el proyecto no es tan activo. Vea mis comentarios aquí sobre una evaluación de Spinach vs Cucumber .

Intenté con Cucumber para algunos proyectos hace un par de años y estoy buscando darle otra oportunidad. Realmente no necesito otro artículo de "Beginning Cucumber". En cambio, me gustaría ver algunos usos reales en la naturaleza, uno que otros usuarios de Cucumber considerarían idiomático y libre de antipatrones.

Entonces, en su opinión, ¿cuáles son los mejores ejemplos de especificaciones reales de pepino en proyectos grandes?


Estaba buscando proyectos de pepino también. Y en realidad hay una página wiki en el repositorio de Cucumber con una lista de tales proyectos ( aunque no todos siguen usando Cucumber ):

Proyectos usando Pepino:

Fuente: https://github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber


Estamos utilizando Cucumber en mi proyecto actual para rediseñar una aplicación web, pero no es de código abierto, por lo que no puedo ofrecer un conjunto real de características y pasos.

Diré que hemos estado muy inspirados por el patrón Objetos de Página en estas two samples . Estamos en medio de una refacturación de IU pesada sin nuestro equipo de UX. Usar Page Objects ha hecho que la adaptación de las pruebas a esos cambios sea razonablemente simple.


Me gustaría poder publicar los de nuestro repositorio corporativo (aplicación web interna masiva para un Fortune 500).

Lo mejor en la naturaleza es probablemente las pruebas de Wikipedia:

https://github.com/wikimedia/qa-browsertests

Realmente necesitas abstraer con objetos de página. Incluso cuando su aplicación supera las 30 pantallas de entrada, sus pruebas se vuelven difíciles de abstraer.

Tengo una forma experimental de abstraer rápidamente rutas comunes sin ciclos; probablemente debería limpiarlo y enviarlo como una solicitud de extracción a Cheezy: github.com/cheezy/page-object


Puedes leer diaspora''s pruebas de pepino de diaspora''s . Es un proyecto bastante grande, así que creo que puedes aprender algo de él.



Un problema común con los proyectos grandes es que las características de Cucumber toman mucho tiempo para escribir.

Por lo tanto, hay varias estrategias involucradas: si usa Cucumber para describir un sistema heredado, obtiene una buena cobertura de prueba de aceptación a través de pepino y capibara, y luego refactoriza sus definiciones de pasos de pepino.

Si está realizando pruebas unitarias de forma adecuada, utilice Pepino para describir solo la ruta feliz de su aplicación, o solo las rutas esenciales no felices. Obtenga cobertura con RSpec (o Xunit de elección).

Los problemas clave con Cucumber son que las características deberían describir la funcionalidad a un nivel muy alto. Necesita convertir sus definiciones de pasos en SECAS y reutilizables, y soy partidario de redirigir las definiciones de pasos para mantener las características interesantes de las partes interesadas concisas y al grano. Aunque creo que ese punto puede ser un poco polémico.


Yo recomiendo:

https://github.com/teambox/teambox/tree/dev/features

Actualización: Como mencionó Ivailo Bardarov, usan websteps, lo cual es una mala práctica en la actualidad. ¡Solo mira esto como una referencia para ver buenas características y no pasos!

Actualización 2: creo que, a destiempo, aprendí mucho de seguir las características de pepino proporcionadas con la versión paga del libro de Object on Rails. El código fuente no es de código abierto, así que no puedo publicarlo aquí o no pude encontrar un enlace.

Mi forma preferida es mantener el lenguaje de las funciones cerca del dominio / idioma comercial en lugar de seguir pasos específicos o completar el formulario. Entonces, en lugar de tener algo como esto en mis características:

When I fill in "Name" with "XYZ

Voy a tener mi función decir:

When I create a project: | name | | xyz |

Y luego mi paso, el código para hacer clic en el enlace, analizar la tabla y completar el campo de formulario correspondiente, etc.