Créer et faire des tests dans Symfony.
- PHP >= 8.1
- Symfony CLI
- Composer
- MySQL ou MariaDB
- Node.js + Yarn
- PHPUnit
- Extension PHP
pdo_mysql
Symfony permet d’exécuter des commandes et des tests dans un environnement spécifique (test
) défini par le fichier .env.test
.
Les fixtures permette de créer des fausses données voir dwwm_sjsr_pe5_2023
grâce au fichier fixtures.yaml
.
Dans .env.test
, définir l’URL de la base de données de test :
DATABASE_URL="mysql://root:@127.0.0.1:3306/db_steamish_test"
La base de données de test est définie dans le .env.test
comme pour un .env
ajouter le DATABASE_URL
.
Pour créer la base de données de test il y à la possibilité d'ajouter des paramètres au commande Symfony. Ont créer l'environnement de test.
php bin/console doctrine:database:create --env=test
php bin/console doctrine:migrations:migrate --env=test
ou
symfony console d:d:c --env=test
symfony console d:m:m --env=test
php bin/console hautelook:fixtures:load --purge-with-truncate -n --env=test
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
ou
symfony console d:d:c
symfony console d:m:m
php bin/console hautelook:fixtures:load --purge-with-truncate -n
npm install --global yarn
yarn install
yarn build
Symfony propose une commande pour générer automatiquement une classe de test :
symfony console make:test
- Type de test : choisir
WebTestCase
pour un test fonctionnel. - Nom du fichier : par exemple
Controller\Front\HomeController
.
Cela crée un fichier de test dans tests/Controller/Front/HomeControllerTest.php
correspondant à l’arborescence du code source (src/Controller/Front
).
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class HomeControllerTest extends WebTestCase
{
public function testSomething(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/');
$this->assertResponseIsSuccessful();
$this->assertSelectorTextContains('h1', 'Instant-Faking');
}
}
createClient()
: simule un navigateurrequest('GET', '/')
: effectue une requête HTTP vers la page d’accueilassertResponseIsSuccessful()
: vérifie que le code HTTP est 200assertSelectorTextContains()
: vérifie la présence d’un élément HTML contenant un texte donné
Test d’un nombre précis d’éléments HTML :
$crawler = $crawlerGlobal->filter('h2');
$this->assertCount(4, $crawler, "One title is missing");
Ici, on s’attend à trouver exactement 4 balises <h2>
, sinon le message d’erreur est affiché.
php bin/phpunit tests/Controller/Front/HomeControllerTest.php
php bin/phpunit
✅ Pense à renommer
phpunit.xml.dist
enphpunit.xml
pour activer la configuration locale.
git checkout -b new
git add .
git commit -m "saves"
git status
git checkout main
git pull
Changer tous les mots de passe utilisateurs pour la valeur 12345
(bcrypt) :
UPDATE user
SET password = '$2y$13$lB3ddnHoChlOGiOoP1kXL.jPCnRZWFRrGIEdt27DBeD.MmuYIunAK'
WHERE 1;
Action | Commande |
---|---|
Créer la BDD | php bin/console doctrine:database:create |
Appliquer les migrations | php bin/console doctrine:migrations:migrate |
Charger les fixtures | php bin/console hautelook:fixtures:load --purge-with-truncate -n |
Créer la BDD de test | php bin/console doctrine:database:create --env=test |
Appliquer les migrations en test | php bin/console doctrine:migrations:migrate --env=test |
Charger les fixtures en test | php bin/console hautelook:fixtures:load --purge-with-truncate -n --env=test |
Créer un test | symfony console make:test |
Lancer un test | php bin/phpunit ou php bin/phpunit tests/... |
Compiler les assets front (yarn) | yarn install && yarn build |