Tests fonctionnels Symfony 5.3.9 dans Gitlab CI

Par bunny, il y a 4 ans


Hello world !
J'essaye de trouver une solution à l'exception levée dans mon pipeline CI de gitlab lors de l'execution des tests fonctionnels dans une image php:8.0-apache.

NB : Mes tests passe bien en local sans probleme.

Mon fichier config/packages/framework.yaml :

when@test: framework: test: true session: storage_factory_id: session.storage.factory.mock_file

mon image docker pour mon job de tests dans le pipeline CI:

phpunit: image: php:8.0-apache stage: 'Units/Functionals Tests' services: - name: mysql:latest alias: mysql variables: MYSQL_ROOT_PASSWORD: toor MYSQL_DATABASE: mysda_db before_script: - apt-get update && apt-get install -y git libzip-dev - curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer - curl -sSk https://get.symfony.com/cli/installer | bash && mv /root/.symfony/bin/symfony /usr/local/bin - docker-php-ext-install mysqli pdo pdo_mysql zip - symfony console d:d:d --if-exists --force --env=test - symfony console d:d:c --env=test - symfony console d:m:m --env=test -n script: - symfony php bin/phpunit --testdox allow_failure: false

Ce que je veux

Executer des testFonctionnels basic WebTestCase dans un pipeline CI de gitlab
script :

class DemoFunctionalTest extends WebTestCase { public function testShouldDisplayDemo(): void { $client = static::createClient(); $client->followRedirects(); $crawler = $client->request('GET', '/demo'); $this->assertResponseIsSuccessful(); $this->assertSelectorTextContains('h1', 'Demo index'); }...
commande : symfony php bin/phpunit --testdox

Ce que j'obtiens

LogicException: You cannot create the client used in functional tests if the "framework.test" config is not set to true.
Pour chaque test ou j'essaye de créer un client : $client = static::createClient();

Demo Functional (App\Tests\DemoFunctional) ✘ Should display demo │ │ LogicException: You cannot create the client used in functional tests if the "framework.test" config is not set to true. │ │ /builds/ethicsforanimals1/site-administratif/vendor/symfony/framework-bundle/Test/WebTestCase.php:52 │ /builds/ethicsforanimals1/site-administratif/tests/DemoFunctionalTest.php:11

Merci à tous pour vos reponses.

5 réponses

Chaya, il y a 4 ans

Ce topic m'intéresse aussi car je suis confronté au même souci là!!

Gulivert, il y a 4 ans

Hello,

Peux-tu poster ton ficher phpunit.xml stp ?

As-tu bien configurer la variable d'environment APP_ENV sur test dans ce fichier ?

bunny, il y a 4 ans

Bonjour Gulivert,
Chez moi c'est phpunit.xml.dist je n'y ai pas toucher pour l'instant et APP_ENV est setté à test.
peut-etre faut-il absolument avoir un fichier nommer phpunit.xml sans le dist à la fin ?

<?xml version="1.0" encoding="UTF-8"?> <!-- https://phpunit.readthedocs.io/en/latest/configuration.html --> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="tests/bootstrap.php" convertDeprecationsToExceptions="false" > <php> <ini name="display_errors" value="1" /> <ini name="error_reporting" value="-1" /> <server name="APP_ENV" value="test" force="true" /> <server name="SHELL_VERBOSITY" value="-1" /> <server name="SYMFONY_PHPUNIT_REMOVE" value="" /> <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" /> </php> <testsuites> <testsuite name="Project Test Suite"> <directory>tests</directory> </testsuite> </testsuites> <coverage processUncoveredFiles="true"> <include> <directory suffix=".php">src</directory> </include> </coverage> <listeners> <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" /> </listeners> <!-- Run `composer require symfony/panther` before enabling this extension --> <!-- <extensions> <extension class="Symfony\Component\Panther\ServerExtension" /> </extensions> --> </phpunit>

Et le fichier config/packages/framework.yaml en entier :

# see https://symfony.com/doc/current/reference/configuration/framework.html framework: secret: '%env(APP_SECRET)%' #csrf_protection: true http_method_override: false # Enables session support. Note that the session will ONLY be started if you read or write from it. # Remove or comment this section to explicitly disable session support. session: handler_id: null cookie_secure: auto cookie_samesite: lax storage_factory_id: session.storage.factory.native #esi: true #fragments: true php_errors: log: true when@test: framework: test: true session: storage_factory_id: session.storage.factory.mock_file

Apres quelques recherche j'ai constaté que ceux qui avait la meme exception avait le fichier framwork.yaml dans config/packages/test/.
Donc je l'ai dupliquer dans ce dossier mais ça n'a pas resolu le pb.
J'ai desinstallé et réinstallé le package phpunit mais ça n'a rien changer.
Je suis un peu à court d'idée

Merci encore pour vos retours

bunny, il y a 4 ans

Je fais remonter mon topic car mon soucis n'est toujours pas resolu.
@Grafikart, as-tu deja experimenter ce soucis ?

Apyo, il y a 4 ans

Bonjour,

J'avais la même erreur mais en local.
En faisant un dd de APP_ENV dans l'un de mes tests je me suis rendu compte que l'env est en dev car appliqué par mon docker-compose.yml qui empêche donc la surcharge de la conf dans phpunit.xml.dist.
En virant le APP_ENV de mon docker-compose plus de pb.

L'explication est en fait ici