[Symfony 4] – Tests unitaires

Rien à voir avecPhpUnit mais on va installer un serveur web pour exécuter notre site :

Puis pour lancer le serveur :

Vous pouvez comme ça accéder à votre application avec : http://127.0.0.1:8000

Ensuite pour les tests, il faut le composant PHPUnit :

Et pour les tests fonctionnels on va avoir besoin de :

Il faut aussi créer le répertoire (si cela n’a pas était fait automatiquement) qui contiendra tout nos tests, on l’appellera pour être original : « tests »

Et comme on est feignant on va faire appelle au maker pour nous créer nos classes :

On va maintenant faire un peu de config, dans le fichier config/packages/test/framework.yaml, nous allons lui dire que nous allons utiliser les sessions (juste décommenter les 2 dernières lignes) :

Et surtout ajouter cette ligne dans le fichier phpunit.xml.dist, c’est sur cette base de données que va se connecter phpunit pour effectuer qui ont besoin de votre base :

ATTENTION : il faut que la base de données soit la même que ce qu’il y a dans votre fichier env.
Ceci implique que vos tests seront réalisés sur la base réelle, l’idéal serait de remplacer userDemo par userDemoTest et utiliser une base dédiée aux tests.
Le problème c’est que je n’ai pas trouvé les commandes en symfony 4 pour créer la base test avec son schéma.

Vous pouvez déjà exécuter les tests par défaut en faisant simplement :

Voici le résultat attendu :

On va maintenant créer un 1er test qui consiste à vérifier qu’un message d’erreur s’affiche bien lorsque l’utilisateur s’inscrit en ne saisissant pas les 2 mêmes mot de passe :

Si tout va bien vous devriez obtenir :

 

20 commentaires

  1. bonjour ,
    je suis très satisfait de votre tutoriel mais j’ai un petit problème quand j’exécute le test : php bin/phpunit il me sort un erreur
    There was 1 failure:

    1) App\Tests\FunctionalTest::testSomething
    Failed asserting that 0 is identical to 1.

    E:\wamp64\www\projet\tests\FunctionalTest.php:15

    j’ai pas compris pourquoi il me sort sa
    si vous pouvez me donner une réponse sa sera gentille de t’a part

  2. Bonjour Guillaume
    Merci pour ta réponse
    pour info J’ai téléchargé le code complet et j ais fait un : composer update -o et j’ai créé la base, j ai rajouté les utilisateurs par défaut, j ai testé la connexion est ok, il n’y a que la création un user qui me renvoit un message erreur

    // src/Controller/RegistrationController.php

    class RegistrationController extends Controller
    {
    /**
    * @Route(« /register », name= »user_registration »)
    */
    public function registerAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, EventDispatcherInterface $eventDispatcher)

    Non, j’ai la même erreur avec : http://127.0.0.1:8000/register/
    Merci

  3. http://127.0.0.1:8000/register/

    No route found for « GET /register/ »

    Symfony\Component\HttpKernel\Exception\
    NotFoundHttpException
    in vendor\symfony\http-kernel\EventListener\RouterListener.php (line 144)
    if ($referer = $request->headers->get(‘referer’)) { $message .= sprintf(‘ (from « %s »)’, $referer); } throw new NotFoundHttpException($message, $e); } catch (MethodNotAllowedException $e) { $message = sprintf(‘No route found for « %s %s »: Method Not Allowed (Allow: %s)’, $request->getMethod(), $request->getPathInfo(), implode(‘, ‘, $e->getAllowedMethods())); throw new MethodNotAllowedHttpException($e->getAllowedMethods(), $message, $e); }

  4. D:\wamp64\www\userDemo-master>php bin/console debug:router
    ————————– ——– ——– —— ———————————–
    Name Method Scheme Host Path
    ————————– ——– ——– —— ———————————–
    index ANY ANY ANY /
    admin ANY ANY ANY /admin
    user_registration ANY ANY ANY /register
    security_login ANY ANY ANY /login
    security_logout ANY ANY ANY /logout
    _twig_error_test ANY ANY ANY /_error/{code}.{_format}
    _wdt ANY ANY ANY /_wdt/{token}
    _profiler_home ANY ANY ANY /_profiler/
    _profiler_search ANY ANY ANY /_profiler/search
    _profiler_search_bar ANY ANY ANY /_profiler/search_bar
    _profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
    _profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
    _profiler_open_file ANY ANY ANY /_profiler/open
    _profiler ANY ANY ANY /_profiler/{token}
    _profiler_router ANY ANY ANY /_profiler/{token}/router
    _profiler_exception ANY ANY ANY /_profiler/{token}/exception
    _profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
    ————————– ——– ——– —— ———————————–
    et oui la route est bien la user_registration ANY ANY ANY /register

    1. Intéressant, est-ce que tu as installer le package annotation ?

      composer require annotations

      Ce package permet de lire tout ce qui est en … annotation 🙂 comme par exemple @Route

    1. Je sens que tu ne vas pas aimer ma réponse mais chez moi ça fonctionne !
      Est-ce que par hasard ton localhost:8000 ne pointerait pas sur un autre répertoire ?

      1. Oui j’adore ta renonce lol
        oui je lance bien le bon service symfony dans le bon dossier
        j ai bien mes route dans symfony

        Route Matching Logs
        Path to match: /register/
        # Route name Path Log
        1 index / Path does not match
        2 admin /admin Path does not match
        3 user_registration /register Path does not match
        4 security_login /login Path does not match
        5 security_logout /logout Path does not match
        6 _twig_error_test /_error/{code}.{_format} Path does not match
        7 _wdt /_wdt/{token} Path does not match
        8 _profiler_home /_profiler/ Path does not match
        9 _profiler_search /_profiler/search Path does not match
        10 _profiler_search_bar /_profiler/search_bar Path does not match
        11 _profiler_phpinfo /_profiler/phpinfo Path does not match
        12 _profiler_search_results /_profiler/{token}/search/results Path does not match
        13 _profiler_open_file /_profiler/open Path does not match
        14 _profiler /_profiler/{token} Path does not match
        15 _profiler_router /_profiler/{token}/router Path does not match
        16 _profiler_exception /_profiler/{token}/exception Path does not match
        17 _profiler_exception_css /_profiler/{token}/exception.css Path does not match

  5. Le cmd
    D:\wamp64\www\userDemo-master>php bin/console server:run

    [OK] Server listening on http://127.0.0.1:8000

    // Quit the server with CONTROL-C.

    2018-03-22T17:55:07+00:00 [info] Matched route « index ».
    2018-03-22T17:55:07+00:00 [info] Populated the TokenStorage with an anonymous Token.
    2018-03-22T17:55:07+00:00 [info] Matched route « _wdt ».
    2018-03-22T17:55:08+00:00 [error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: « No route found for « GET /favicon.ico » (from « http://127.0.0.1:8000/ ») » at D:\wamp64\www\userDemo-master\vendor\symfony\http-kernel\EventListener\RouterListener.php line 144
    2018-03-22T17:55:10+00:00 [error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: « No route found for « GET /register/ » (from « http://127.0.0.1:8000/ ») » at D:\wamp64\www\userDemo-master\vendor\symfony\http-kernel\EventListener\RouterListener.php line 144
    2018-03-22T17:55:10+00:00 [info] Matched route « _wdt ».
    2018-03-22T17:55:19+00:00 [info] Matched route « _profiler ».
    2018-03-22T17:55:20+00:00 [info] Matched route « _profiler_search_bar ».
    2018-03-22T17:55:29+00:00 [info] Matched route « _profiler ».
    2018-03-22T17:55:29+00:00 [info] Matched route « _profiler_search_bar ».
    2018-03-22T17:55:29+00:00 [info] Matched route « _profiler_router ».
    2018-03-22T17:55:55+00:00 [info] Matched route « _profiler ».
    2018-03-22T17:55:55+00:00 [info] Matched route « _profiler_exception_css ».
    2018-03-22T17:55:55+00:00 [info] Matched route « _profiler_search_bar ».
    2018-03-22T17:55:55+00:00 [info] Matched route « _profiler_exception ».
    2018-03-22T17:58:06+00:00 [error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: « No route found for « GET /register/ » » at D:\wamp64\www\userDemo-master\vendor\symfony\http-kernel\EventListener\RouterListener.php line 144
    2018-03-22T17:58:07+00:00 [info] Matched route « _wdt ».

  6. Bonjour et super tuto 🙂

    Mais j’ai un problème au moment du test des mots de passes.

    D:\VidalGuillaume\VisiteVirtuelle-Symfony>php bin/phpunit
    #!/usr/bin/env php
    PHPUnit 6.5.8 by Sebastian Bergmann and contributors.

    Testing Project Test Suite
    F. 2 / 2 (100
    %)

    Time: 396 ms, Memory: 22.00MB

    There was 1 failure:

    1) App\Tests\RegistrationControllerTest::testCheckPassword
    Failed asserting that 0 matches expected 1.

    D:\VidalGuillaume\VisiteVirtuelle-Symfony\tests\RegistrationControllerTest.php:30

    FAILURES!
    Tests: 2, Assertions: 3, Failures: 1.

    Je ne comprend pas ce que cela signifie.

    Mon code : https://github.com/VisiteVirtuelle/VisiteVirtuelle-Symfony

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.