Me gustaría saber sobre las expresiones idiomáticas o las mejores prácticas para probar un flujo de trabajo de varios pasos utilizando rspec.probando un flujo de trabajo de varios pasos en rspec
Tomemos como ejemplo un sistema de "carrito de compras", en el que el proceso de compra podría ser
- cuando el usuario se somete a la cesta y no utiliza HTTPS, redirección a https
- cuando el usuario se somete a cesta y estamos usando https y no hay cookies, crear y mostrar una nueva cesta y enviar una cookie
- cuando el usuario envía a la cesta y estamos utilizando https y hay una cookie válida y el nuevo artículo es para una diferente producto que el primer artículo, agregue una línea a la cesta y muestre ambas líneas
- cuando el usuario envía a la cesta y estamos usando https y hay una cookie válida y el nuevo artículo es para el mismo producto que el anterior, incrementa la cantidad de la línea de cesta y muestra ambas líneas
- cuando el usuario hace clic en 'pagar' en la página de la cesta y está utilizando https y no hay una cookie y la cesta es no vacío y ...
- ...
he leído http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/, que entre otras cosas, informa que cada "se bloquee" debe contener solo una afirmación: en lugar de hacer el cálculo y luego probar varios atributos en el mismo bloque, use un "antes" dentro de un contexto para crear (o recuperar) el objeto bajo prueba y asígnelo a @some_instance_variable, luego escriba cada prueba de atributo como un bloque separado. Eso ayuda un poco, pero en un caso como el descrito anteriormente donde el paso de prueba n requiere hacer toda la configuración para los pasos [1..n-1] me encuentro duplicando el código de configuración (obviamente no es bueno) o creando muchas funciones auxiliares con nombres cada vez más difíciles de manejar (def create_basket_with_three_lines_and_two_products) y llamándolos consecutivamente en cada paso anterior al bloque.
¿Algún consejo sobre cómo hacer esto de forma menos prolija/tediosa? Aprecio el principio general detrás de la idea de que cada ejemplo no debe depender del estado dejado por ejemplos anteriores, pero cuando está probando un proceso de varios pasos y las cosas pueden salir mal en cualquier paso, configurar el contexto para cada paso es inevitablemente va a requerir volver a ejecutar toda la configuración de los n pasos anteriores, así que ...
ahora que ha usado rspec-steps gem ¿está contento con el resultado para resolver el problema del respeto en varios pasos? – Angela
@Angela: Hmm, buena pregunta. Lo usé brevemente, pero el resto del grupo no estaba interesado en él, así que terminamos abandonándolo y teniendo más duplicaciones. Creo * que el razonamiento era que necesitábamos más legibilidad, pero ha sido mucho tiempo ... En este punto, me parece que las pruebas de integración verdaderas son más fáciles de escribir simplemente como funciones grandes que hacen un solo "flujo de trabajo" por prueba. No es el enfoque más idiomático o popular, pero me gusta la legibilidad. – Nerdmaster
Veo tan solo una sola 'descripción' en el rspec? – Angela