Le besoin

Comme vous le savez surement si vous nous connaissez un peu, nous éditons VictoireDCMS qui est une sur-couche à installer sur un projet Symfony2.

Nous avons l'habitude de tester nos projets avec Behat et il est très facile de le faire lorsqu'on a un projet complet, c'est même fait pour.

Mais comment faire lorsque l'on veut tester un bundle Symfony2 (ou un ensemble de bundle comme nous avons avec le pack victoire/victoire) sans contexte, sans projet précis ? Pas d'AppKernel ni d'autoload... Est-ce même possible ?

Le principe

On a cherché quelques pistes et voici celle qui a fonctionné pour nous (nous sommes ouvert d'ailleurs, n'hésitez pas si vous avez une autre solution) :

  • Définir une automatisation des tests en fonction de la solution d'intégration continue sélectionnée (par exemple .travis.yml pour TravisCI)
  • Simuler l'existence d'un projet au sein même du dépôt
    • app/config/config_test.yml
    • app/config/routing_test.yml
    • app/AppKernel.php
    • bin/console
    • web/app.php
  • (évidemment) Écriture de tests behat de base dans le projet et paramétrer behat (behat.yml)

Travis, le système d'inté continu que l'on a utilisé pour tester notre bundle va donc lire la recette (ci-desous) et va lancer les tests behat après avoir préparé le projet.

Si vous avez l'habitude de tester des projets, c'est comme d'habitude, sinon je vous explique ce qu'on fait dans le fichier .travis.yml au niveau de before_script :

  • on installe tout ce dont on a besoin (ici juste less)
  • on prépare la base de données (database, schema, fixtures)
  • on lance quelques commandes propres à Victoire et requises au bon démarrage
  • lancement d'un serveur de test grâce à la console (nohup sert à ne pas lier un processus à l'utilisateur qui l'a lancé et donc de pouvoir se déconnecter sans couper le process et le & à la fin de la ligne signifie "en tâche de fond"
  • lancement d'un serveur selenium pour exécuter les tests behat

Ce qui nous intéresse ensuite, c'est la partie script:

  • on lance les tests unitaires
  • on lance les tests behat

Concrêtement

Un dernier truc

Si l'intégration continue est quelque chose qui vous intéresse, voici quelques-uns des solutions d'intégration continue que nous connaissons et affectionnons. Bien sur, cette liste n'est pas exhaustive et n'hésitez pas à nous prévenir si vous connaissez un système bien foutu !

comments powered by Disqus