Voici l'avant dernier billet de la série sur la prise en main de Behat. Pour rappel, on a vu :
Allons un peu plus loin :-)
Assez rapidement on se retrouve à devoir gérer des cas particuliers, par exemple :
On sort des cas classiques de Mink. Comment faire ?
La solution consiste à développer nous même ce comportement :
On commence par récupérer notre page à partir de l'objet de session:
Ensuite on va récupérer l'élément html concerné. Il existe différente manière de faire cela. Le plus simple dans notre cas consiste à passer par un des raccourcis de sélection de Mink : findButton(libellé | id | nom)...
Si l'élément html n'est pas trouvé, on va lever une exception, sinon on va continuer en faisant une assertion simple : l'élément doit avoir l'attribut "disabled". Ce qui donne au final :
Au passage, remarquez qu'il s'agit d'une assertion classique de PHPUnit, mais en mode fonction. Pour cela on aura bien entendu ajouté au début de notre fichier :
Je vous laisse regarder la documentation ou la feuille d'astuce pour Mink pour plus d'informations. Sachez juste qu'on peut faire pas mal de chose, comme exécuter du JavaScript par exemple (avec $session->evaluateScript() ) ;-) ...
Jusqu'ici on a systématiquement mis notre code dans le fichier FeatureContext.php. C'est pas l'idéal : on va très vite se retrouver avec un fichier énorme et imbuvable. Il nous suffit de découper notre contexte en sous-contextes. Tout se fait dans le constructeur du contexte principal :
On a donc isolé le contexte de Mink pour en faire un sous-contexte, et on a plus ajouté le nôtre ('example1').
L'utilisation des contextes est assez simple. Chaque sous-contexte a un nom (ici 'mink' et 'behat'), que l'on peut utiliser pour les récupérer :
Par exemple :
On va donc créer le fichier MyExample1Context.php :
Et voilà, nous voici avec un code découpé et des fichiers plus spécialisés.
Comme pour les tests unitaires, il est possible d'exécuter du code à certaines phases du déroulement du tests. Il suffit d'utiliser des annotations :
les déclencheurs disponibles sont :
Un dessin valant mieux qu'un long discours, le plus simple est de regarder ici.
On voit qu'on a quand même peu de limites avec Mink et Behat. Bien plus, on peut même l'intégrer à une PIC (Jenkins, Hudson...). C'est d'ailleurs ce qu'on verra dans le prochain billet, qui sera le dernier de la série ^^
=> Juste par curiosité : j'utilise exclusivement Sahi pour mes tests. Beaucoup de monde utilise Selenium ? C'est mieux ? Vous avez des avis ?© Jean-François Lépine, 2013 - 2024