Je voudrais connaître les idiomes ou les meilleures pratiques pour tester un flux de travail en plusieurs étapes à l'aide de rspec.test d'un flux de travaux en plusieurs étapes dans rspec
Prenons comme exemple un système « panier », où le processus d'achat pourrait être
- lorsque l'utilisateur soumet au panier et nous ne sommes pas en utilisant https, redirigent vers https
- lorsque l'utilisateur soumet à panier et nous utilisons https et il n'y a pas de cookie, créer et afficher un nouveau panier et renvoyer un cookie
- lorsque l'utilisateur soumet à panier et nous utilisons https et il y a un cookie valide et le nouvel article est pour un autre produit que le premier article, ajouter une ligne au panier et afficher les deux lignes
- lorsque l'utilisateur soumet au panier et nous utilisons https et il y a un cookie valide et le nouvel article est pour le même produit qu'un précédent, incrémenter la quantité de la ligne de panier et afficher les deux lignes
- lorsque l'utilisateur clique sur 'Commander' sur la page du panier et utilise https et il y a un cookie et le panier est non vide et ...
- ...
J'ai lu http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/ qui ia conseille que chaque « il bloque » ne devrait contenir qu'une seule assertion: au lieu de faire le calcul puis de tester plusieurs attributs dans le même bloc, utiliser un "avant" dans un contexte pour créer (ou récupérer) l'objet sous test et l'assigner à @some_instance_variable, puis écrivez chaque test d'attribut en tant que bloc distinct. Cela aide un peu, mais dans un cas comme décrit ci-dessus où l'étape n de test nécessite de faire toute la configuration pour les étapes [1..n-1] je me trouve soit en dupliquant le code d'installation (évidemment pas bon) ou en créant beaucoup de fonctions auxiliaires avec des noms de plus en plus lourds (def create_basket_with_three_lines_and_two_products) et en les appelant consécutivement dans chaque étape avant le bloc.
Des conseils sur la façon de le faire moins verbeusement/fastidieusement? J'apprécie le principe général derrière l'idée que chaque exemple ne doit pas dépendre de l'état laissé par les exemples précédents, mais lorsque vous testez un processus en plusieurs étapes et que les choses peuvent mal tourner à n'importe quelle étape, va inévitablement exiger de réexécuter toute la configuration pour les n étapes précédentes, donc ...
maintenant que vous avez utilisé rspec-steps gem êtes-vous satisfait du résultat pour résoudre le problème de respect en plusieurs étapes? – Angela
@Angela: Hmm, bonne question. Je l'ai utilisé brièvement, mais le reste du groupe ne l'aimait pas, alors nous avons fini par l'abandonner et avoir plus de duplication. Je pense que le raisonnement était que nous avions besoin de plus de lisibilité, mais cela fait longtemps ... À ce stade, je trouve que les vrais tests d'intégration sont plus faciles à écrire comme de grandes fonctions qui font un seul flux de travail par test. Pas l'approche la plus idiomatique ou populaire, mais j'aime la lisibilité. – Nerdmaster
Je vois donc juste un seul 'describe' dans le rspec? – Angela