Je veux réutiliser certaines étapes du concombre mais je n'arrive pas à trouver le bon chemin.
Je veux écrire une étape comme:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
Mais alors ayez une autre étape comme:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
Donc, en testant l'authentification des utilisateurs, je peux utiliser le premier, mais dans la plupart des autres endroits, je peux utiliser le second, sans avoir à reproduire le code.
Existe-t-il un moyen d'appeler cette autre étape, ou est-ce que je mets simplement la logique dans une méthode d'aide et appelle-t-elle ladite méthode à partir de chaque tâche (essentiellement un refactoring d'extraction de méthode, qui, après avoir lu ma question, me fait croire que c'est en fait le meilleur moyen en tous cas)?
do
nécessaire pour démarrer ledo...end
bloc dans la définition de l'étape Ruby. C'est en fait obligatoire.Réponses:
MISE À JOUR : la méthode décrite ci-dessous est obsolète. La méthode recommandée pour appeler une étape à partir d'une autre étape ressemble maintenant à ceci:
Ancienne méthode obsolète (pour référence):
Vous pouvez appeler des étapes d'autres étapes comme celle-ci:
Si tous les scénarios d'une fonctionnalité nécessitent cette étape (ou d'autres étapes), vous pouvez également ajouter un arrière-plan à chaque fonctionnalité, avec les étapes courantes, comme ceci:
la source
steps %Q{Given I am logged in}
steps
méthode n'existait pas. Voir ma réponse ci-dessous.Notez que la méthode d'appel des étapes dans les étapes a changé dans les versions récentes de concombre, ce que vous verrez si vous obtenez une erreur du type "AVERTISSEMENT: l'utilisation de 'Compte tenu / Quand / Alors' dans les définitions d'étape est obsolète, utilisez 'step' pour appelez d'autres étapes à la place: /path/to/step_definitions/foo_steps.rb: 631: in `block in '". Voir le wiki du concombre pour plus de détails.
L'essentiel du changement est que vous devez maintenant utiliser les méthodes
step
ousteps
.la source
syntax error, unexpected tIDENTIFIER, expecting keyword_end
stackoverflow.com/questions/43319331/…L'appel d'étapes à partir de définitions d'étape est une mauvaise pratique et présente certains inconvénients :
Aslak Hellesøy recommande d'extraire les actions populaires dans World au lieu de réutiliser les étapes. Il isole ces actions en un seul endroit, facilite la recherche de ce code. Vous pouvez également extraire du code vers des classes ou des modules Ruby habituels.
Voici une discussion utile sur le sujet dans la liste de diffusion Cucumber - lien
la source
Mieux vaut encapsuler vos étapes en% {} plutôt qu'en guillemets. Ensuite, vous n'avez pas besoin d'échapper aux guillemets doubles que vous devrez utiliser fréquemment:
la source
Réutilisez les mots-clés dans le fichier d'entités qui fourniront la réutilisabilité du code.
Il n'est pas recommandé d'appeler step defs dans step defs.
J'écrirais mon fichier d'entités de cette façon,
Dans ma définition d'étape, (c'est Java)
De cette façon, il y a beaucoup de réutilisabilité du code. Votre même Étant donné et Alors gère les scénarios valides et non valides. En même temps, votre fichier d'entités a du sens pour les lecteurs.
la source