Utiliser le coeur de Composer pour les tests unitaires
Lors du dernier blogue, le fichier composer.json a été présenté. Il est central à l'utilisation de Composer compte tenu qu'il spécifie les librairies qui sont utilisées, leur version, d'où elles sont obtenues et d'autres informations de configuration.
Maintenant, nous allons voir comment utiliser ce fichier afin de mettre en place des tests unitaires.
Tests unitaires
Premièrement, vous devez installer une librairie de tests. Il y en a plusieurs.
En voici quelques-unes :
- PHPUnit avec 748 millions de téléchargements sur Packagist et 19 800 étoiles sur Github.
- PHPStan avec 248 millions de téléchargements sur Packagist et 13 300 étoiles sur Github.
- Pest avec 28 million de téléchargements sur Packagist et 10 000 étoiles sur Github.
- Codeception avec 71 millions de téléchargements sur et 4 800 étoiles sur Github
Nous choisirons PHPUnit car elle est manifestement la plus populaire dans le contexte de PHP et a une documentation complète. Cependant, nous tenterons d'utiliser Pest aussi. Je m'explique : Pest est une surcouche par-dessus PHPUnit qui permet de faire la même chose mais en language qui se rapproche du language naturel.
Voici l'exemple d'un test avec PHPUnit :
class SumTest extends TestCase
{
public function testSum()
{
$result = sum(1, 2);
$this->assertEquals(3, $result);
}
}
Voici son équivalent écrit avec Pest tiré du site de la librairie :
test('sum', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
Nous pouvons donc voir assez rapidement ce qui se passe compte tenu que le test est écrit dans un language qui est près de celui naturel. Et l'avantage c'est que Pest utilise PHPUnit et permet même d'utiliser PHPUnit à travers Pest. Donc, pour utiliser Pest, nous devons d'abord installer les librairies nécessaires.
Installer les librairies
Selon le guide d'installation de Pest, nous devons executer ces commandes :
composer remove phpunit/phpunit
composer require pestphp/pest --dev --with-all-dependencies
Vous pouvez aussi passer par Composer.json, bien que les commandes précédentes arrivent probablement à un meilleur résultat vu qu'elles assurent d'installer les dépendances nécessaires à Pest :
{
"require-dev": {
"pestphp/pest": "^2.0",
"phpunit/phpunit": "^9.5"
},
"scripts": {
"test": "pest"
}
}
L'utilisation de require-dev est surtout utile si vous n'utiliserez pas les librairies dans un environnement de production et vous ne souhaitez qu'expérimenter avec la librairie. Si vous souhaitez utiliser Pest en production, alors remplacez require-dev
par require
.
Ensuite, vous devez faire la commande composer install
pour installer si vous avez utilisé la méthode utilisant composer.json et ./vendor/bin/pest --version
pour vérifier que l'installation s'est bien déroulée.
Initialiser Pest
La commande ./vendor/bin/pest --init
va créer un fichier de configuration nommé Pest.php à la racine de la suite de tests nécessaire pour l'exécution des tests.
Comprendre l'architecture
Voici l'architecture typique du dossier de tests.
├── 📂 tests
│ ├── 📂 Unit
│ │ └── ExampleTest.php
│ └── 📂 Feature
│ │ └── ExampleTest.php
│ └── TestCase.php
│ └── Pest.php
├── phpunit.xml
Détails à remarquer :
- Il y a un dossier pour les tests unitaires et un autre pour les tests de fonctionnalités.
- Pest.php est un fichier où vous configurez les paramètres de pest.
- TestCase.php est là pour définir des paramètres ou des fonctionnalités qui seront utilisés dans tout vos tests.
- phpUnit.xml permet de configurer phpUnit. Pest donner accès à tous les fonctionnalités de PHPUnit.
- Remarquez le nom des tests dans le dossier Unit et Feature. Les deux ont en commun de se terminer par
Test.php
. Il s'agit d'une convention à suivre.
Lancer des tests
Enfin, utilisez la commande ./vendor/bin/pest
pour lancer des tests. Lancer cette commande devrait afficher le résultat de l'exécution de plusieurs tests. À vous maintenant d'en rajouter.
Vous pouvez aussi vous simplifier la vie grâce à composer.json en créant un alias afin de lancer un test grâce à la commande composer test
.
Bref, ce blogue a été un aperçu rapide des tests utilisant la librairie Pest. Le prochain ira plus en détails sur les tests avec Pest.
Bibliographie
- PestPHP, Installation Guide, pestphp.com (Page consultée le 14 mars 2025). Disponible à : https://pestphp.com/docs/installation/
- PestPHP, Writing Tests, pestphp.com (Page consultée le 14 mars 2025). Disponible à : https://pestphp.com/docs/writing-tests/
- PHPUnit, Page Packagist, packagist.org (Page consultée le 15 mars 2025). Disponible à : https://packagist.org/packages/phpunit/phpunit
- PHPUnit, Dépôt GitHub, github.com (Page consultée le 15 mars 2025). Disponible à : https://github.com/sebastianbergmann/phpunit
- PHPStan, Page Packagist, packagist.org (Page consultée le 15 mars 2025). Disponible à : https://packagist.org/packages/phpstan/phpstan
- PHPStan, Dépôt GitHub, github.com (Page consultée le 15 mars 2025). Disponible à : https://github.com/phpstan/phpstan
- PestPHP, Page Packagist, packagist.org (Page consultée le 15 mars 2025). Disponible à : https://packagist.org/packages/pestphp/pest
- PestPHP, Dépôt GitHub, github.com (Page consultée le 15 mars 2025). Disponible à : https://github.com/pestphp/pest Codeception, Page Packagist, packagist.org (Page consultée le 15 mars 2025). Disponible à : https://packagist.org/packages/codeception/codeception
- Codeception, Dépôt GitHub, github.com (Page consultée le 15 mars 2025). Disponible à : https://github.com/Codeception/Codeception
Commentaires1
Super
Super ton article ! C’est clair et concis. Étant moins familier avec PHP, je suis heureux qu'un outil de gestion des dépendances comme composer existe pour me faciliter un peu la vie quand j’ai à utiliser ce language pour un projet.