Mise en place de tests fonctionnels Behat 3 sur un projet Symfony2

Publié le par vincent

Behat est un outil de tests fonctionnels basé sur des scénarios. Sa mise en place est très simple : il suffit d’installer les packages, de définir un Context, et de rédiger autant de scénario que désiré :)

Ce tutoriel est basé sur la version 3.0 de Behat, récemment sortie.


Pour installer Behat sur votre projet Symfony2, vous allez tout d’abord avoir besoin de composer (bah oui, on n’a rien sans rien !). Installez ensuite les librairies suivantes, nécessaires pour faire tourner Behat sur un projet Symfony2 :

"require-dev": {
"behat/symfony2-extension": "2.0.*"
"behat/mink-extension": "2.0.*"
"behat/mink-browserkit-driver": "1.2.*"

Vous pouvez vérifier que Behat est bien disponible en exécutant la commande bin/behat.

Penchons-nous maintenant sur la configuration. Créez le fichier behat.yml à la racine de votre projet. Celui-ci contiendra toute la configuration de Behat pour votre projet :

default:
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
sessions:
symfony2:
symfony2: ~

Cette configuration déclare les extensions Symfony2 et Mink dans Behat afin de se connecter sur le BrowserKit fourni par Symfony2.

Behat est correctement configuré, nous pouvons maintenant rédiger nos tests. Pour cela, exécutez la commande bin/behat --init @AcmeDemoBundle afin d’initialiser un contexte et la structure Behat pour votre bundle. Cette commande vous créer tout d’abord la structure de répertoire features/bootstrap/Acme/DemoBundle/Features/Context à la racine de votre projet, contenu une classe FeatureContext. Mettez à jour ce contexte pour y inclure MinkContext, comme suit :

use Behat\MinkExtension\Context\MinkContext;
use Behat\Symfony2Extension\Context\KernelAwareContext;
use Behat\Symfony2Extension\Context\KernelDictionary;

/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements KernelAwareContext
{
use KernelDictionary;
}

Notez l’utilisation de use KernelDictionary;, un trait PHP permettant l’utilisation du Container dans votre contexte ;)

Il est maintenant temps de rédiger votre premier test Behat. Pour ce faire, créer le fichier homepage.feature dans le dossier src/Acme/DemoBundle/Features.

Les tests Behat sont basés sur des mots-clés. Tout d’abord, on déclare une fonctionnalité. Mais comme on speak trop bien l’english, on va utiliser les mots-clés originaux fournis par Behat (il est possible d’utiliser les mots-clés Behat en français, mais ce n’est pas le but de ce tutoriel, et pas forcément compatible sur votre super IDE). Ainsi, une fonctionnalité devient une Feature ! Ce mot-clé va permettre de décrire globalement la fonctionnalité testée et les résultats attendus dans ce test.

Une fonctionnalité est composée de scénarios (ne me dites pas que vous n’arrivez pas à le traduire en anglais celui-là !). Et c’est là que la magie opère :)

Supposons le scénario suivant : je suis sur la page d’accueil, je dois voir 1 seul titre intitulé « Accueil ». En Behat, on traduira cela en :

Feature: Show homepage

Scenario: Access to homepage and I should see `Accueil` title
Given I am on the homepage
Then I should see 1 "article header h1" elements
And should see "Accueil" in the "article header h1" element
But I should not see "Exemple" in the "article header h1" element

  • Given : ok, là je pose le contexte de base de mon scénario, par exemple : je suis sur la page d’accueil
  • Then : « alors je… », là je commence mes tests sur le contexte prédéfini, par exemple : alors je dois voir 1 élément « article header h1″
  • And : « et je… », équivalent à Then, cela permet une lecture plus humaine du scénario, par exemple : et je dois voir « Accueil » dans l’élément « article header h1″
  • But : « mais je… », toujours pareil, cela permet une lecture plus humaine du scénario, par exemple : mais je ne dois pas voir « Exemple » dans l’élément « article header h1″

Vous l’aurez compris, il est possible de combiner autant de And, de Then ou encore de But que vous le désirez dans votre scénario. Tant que celui-ci reste lisible, même pour un humain, Behat le comprendra :)

Pour finir, je vous invite à consulter la documentation de Behat dans sa version 3.0 (actuellement en cours de rédaction). Celle-ci explique (ou expliquera sûrement) comment tester vos formulaires, l’envoi d’e-mails, accéder à une page avec authentification, et un jour peut-être même faire le café !

Maintenant que tu gères les tests Behat, te voilà maître de ton projet et de ton destin mon poulet !

Cette entrée a été publiée dans Symfony 2 Utils. Vous pouvez la mettre en favoris avec ce permalien.



Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


six + 4 =

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>