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


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
Auteur

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
Auteur

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

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

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