Projet vide permettant d'avoir une base dans la création d'applications en PHP avec un Framework Joomla!
Quatre fichiers (à la racine du projet) sont primordiaux pour le bon fonctionnement projet:
.travis.yml
-> Pour le fonctionnement de Travis (fichier de config).codeclimate.yml
-> Pour le fonctionnement de Code Climatecomposer.json
-> Pour le fonctionnement de Composerphpunit.xml
-> Fichier d'indication de l'emplacement des tests unitaires
Tout d'abord, aller sur https://travis-ci.org/ et se connecter avec son compte GitHub.
Activer le projet sur lequel on souhaite que Travis travaille.
Lors d'un push sur le projet GitHub, Travis va chercher le fichier .travis.yml pour savoir ce qu'il doit faire. C'est le centre de l'intégration continue, c'est lui qui va lancer Composer et PHPUnit.
Il est également possible de configurer des tâches CRON pour tester le projet toutes les semaines, tous les mois...
(Composer requiert un composer install
à la première utilisation).
Grâce à la commande composer update
présente dans le fichier Travis, à chaque push sur une branche Travis va executer composer pour aller chercher les dernières versions des packages utiles au projet.
Le fichier Travis éxécute également la commande composer self-update
permettant à composer de faire une update de lui-même avant de faire une update des packages.
La partie intéressante de l'intégration continue est d'effectuer des tests unitaires à chaque push sur une branche pour voir si les modifications n'ont pas impacté d'autres fonctionnalités de l'application.
PHPUnit est également lancé grâce à une commande présente dans le fichier .travis.yml
Pour se faire nous utilisons PHPUnit qui permet de faire des tests unitaires en PHP. Ce package fonctionne grâce au fichier phpunit.xml qui indique l'emplacement des dossiers de tests à éxécuter.
Cependant il faut un outil pour tester que tous les tests unitaires sont réalisés et également pour savoir quelle est la couverture de tests du projet. C'est pour cela que nous utiliserons CodeClimate qui permet de faire un "CodeCoverage". Il faut également se logger sur https://codeclimate.com avec ses identifiants GitHub pour définir quel est le projet à tester. Un commande dans le fichier Travis éxécute le codeclimate après que le script de tests unitaires se soit éxécuté.
Référence pour l'apprentissage de PHPUnit: https://jtreminio.com/2013/03/unit-testing-tutorial-introduction-to-phpunit/
Référence pour la connexion entre CodeClimate et GitHub: https://docs.codeclimate.com/v1.0/docs/github
Référence pour le lancement automatique de CodeClimate: https://docs.codeclimate.com/v1.0/docs/travis-ci-php-test-coverage
Référence pour la connexion entre CodeClimate et Slack: https://docs.codeclimate.com/v1.0/docs/slack-integration
Les résultats des tests en intégration continue sont disponibles sur http://travis-ci.org, cependant pour rendre plus facile l'accès au résultat, ce dernier est également présent sur GitHub par l'affichage d'un check vert ou d'une croix rouge à côté du nom du commit (au clic dessus nous sommes redirigés sur Travis), mais ils peuvent également être pushés sur un channel Slack qui reprend les éléments importants du commit (son nom, l'URL du résultat, le succès ou l'échec, le numéro de commit, le créateur du commit...).
Référence pour la connexion entre Travis et Slack: https://docs.travis-ci.com/user/notifications/#Configuring-slack-notifications
La structure du dossier de l'application et du dossier de test doit être la même, exemple:
Application:
./phpUnitTutorial/Foo.php
./phpUnitTutorial/Bar.php
./phpUnitTutorial/Controller/Baz.php
Dossier de test:
./phpUnitTutorial/Test/FooTest.php
./phpUnitTutorial/Test/BarTest.php
./phpUnitTutorial/Test/Controller/BazTest.php
Un fichier de test est composé du nom du fichier de l'application suivi de "Test" comme dans l'exemple précédent.
Les méthodes de test doivent commencer par "test" suivi du nom de la méthode, suivi de ce qui est testé (en cas d'erreur il est plus facile de retrouver l'endroit où l'erreur apparait: pas d'abbréviations)
Les méthodes testées doivent être publiques et chaque fichier de test doit étendre "PHPUnit\Framework\TestCase"
D'autres règles existent mais ce sont les plus importantes