2017-03-17 1 views
0

Donc, nous venons de présenter le concombre + Gherkin pour explorer les tests e2e dans notre projet Angular2 assez frais. Nous avons décidé d'écrire les définitions d'étapes dans JS. J'essaie d'être assez générique dans les définitions des étapes. C'est ce que je suis en train de réaliser:Concombre + Gherkin: Parse langage naturel à booléen

Nous avons

this.Then(/^I should see (.*) on the page$/, function(componentName, callback) { expect(element(by.id(componentName)).isPresent()).to.eventually.be.true; setTimeout(callback, 1000); });

Je voudrais permettre également des définitions sous forme de:

Then I should not see Results on the page

pour indiquer que certains les éléments ne sont pas censés être affichés. Toute façon élégante de faire cela ou même construit dans-outils que je pourrais utiliser? La documentation et googling seulement m'a donné des choses qui ont inclus true/false dans la description. J'ai le sentiment que c'n'p fera grandir rapidement nos définitions de pas et rendra la maintenance inutilement difficile à moins de comprendre ce genre de choses à l'avance. Arrêtez-moi si vous pensez que c'est une idée stupide et si oui s'il vous plaît dites-moi pourquoi.

Répondre

1

Vous pouvez intercepter le mot clé 'not' dans votre étape et implémenter deux chemins dans votre implémentation d'étape avec une condition en choisissant la bonne.

Je ne ferais cependant pas cela et accepter plutôt deux étapes. Cela rendrait votre code plus facile à lire et donc moins sujette aux erreurs.

Je voudrais travailler dur sur faire les étapes one-liners et déléguer l'exécution à une classe d'aide. La classe d'aide peut avoir deux façons, le cas positif et le cas négatif. Il peut aussi gérer les choses comme vous semblez le faire avec le temps, etc.

Réécrire votre code, je voudrais essayer d'avoir quelque chose comme ceci:

this.Then(/^I should see (.*) on the page$/, function(componentName) { 
    isPresent(componentName); 
    }); 

Et le cas négatif

this.Then(/^I should not see (.*) on the page$/, function(componentName) { 
    isNotPresent(componentName); 
    }); 

Je ne parle pas couramment le JavaScript, donc ce n'est peut-être pas le Javascript. Mais je travaillerais dur pour pousser les détails communs potentiels à une aide et minimiser le code de colle nécessaire entre Gherkin et JavaScript.

+0

Cela ressemble à la moyenne raisonnable. Merci! – jasper