formats
Publié le 9 octobre 2013, par dans Non classé.

Après quelque mois d’utilisation de l’outil Behat pour réaliser des tests fonctionnels PHP, j’aimerais poster aujourd’hui un nouveau conseil : créez vos « steps » personnalisées.

Une fois de plus, avant de lire cet article il me parait important de remettre les choses dans leur contexte. Je rédige ces tests pour vérifier l’exécution correcte d’un ensemble de fonctionnalités d’un ERP en mode SaaS. J’imagine que cela implique des choix différents au niveau de la rédaction de ces tests, car j’utilise un framework développé en interne.

Cela dit, certain d’entre vous utilisent peut être certains frameworks ou librairies comme jQuery ou Bootstrap, et les « steps » personnalisées ont également du sens dans ce contexte.

Pourquoi ne pas créer des « steps » personnalisées dans Behat ?

Notre ERP dans sa version précédente utilisait beaucoup jQuery. Nous utilisons dans sa version actuelle beaucoup plus de Bootstrap. Ces deux outils permettent de gérer des fenêtres modales.

Or, parfois notre volonté est simplement de fermer la fenêtre ouverte. Il se trouve qu’elle ne se fermera pas de la même manière suivant que l’on utilise jQuery ou Bootstrap (ou autre chose).
Si vous aviez créé une étape qui serait par exemple

je clique sur « .ui-dialog .ui-icon-closethick »

Cette étape est spécifiquement destinée à jQuery au vu des classes utilisées. Imaginons maintenant que l’on change et que l’on désire utiliser Bootstrap de twitter pour gérer les fenêtre modales.
Toutes ces étapes écrites spécifiquement pour jQuery deviennent alors obsolètes. La charge de travail lors de mises à jour devient alors non négligeable puisqu’il faut reprendre tous les tests un par un.

Alors, quelle est la solution pour ne pas ré écrire tous les tests ?

Très simplement, la solution à ce problème est la « step » personnalisée et générique. Au lieu d’écrire une « step » spécifique jQuery, il suffit d’écrire une « step » générique :

je ferme la fenêtre « #id_fenetre »

Et, la seule chose que vous aurez à modifier lors d’un changement de framework est votre méthode PHP dans le fichier featureContext.

Bien sûre, ce problème ne résout pas tout : si vous utilisez simultanément jQuery et Bootstrap sur votre site avec des fenêtres modales issues de ces deux frameworks, cela complique un peu les choses. Si vous désirez absolument garder une seule « step », qui passera peut importe que la cible soit une fenêtre modale issue de Bootstrap ou de jQuery, il va falloir traiter ce cas dans votre « step » générique.
Pour faire cela, il faut réussir à cibler l’élément et vérifier la présence de certaines classes propres à jQuery ou à Bootstrap.

Mais cela est un autre sujet, qui fera peut être également l’objet d’un article !