Построитель дерева без корневого узла устарел с Symfony 4.2 во время функциональных тестов - PullRequest
0 голосов
/ 04 февраля 2019

Я настраиваю приложение Symfony 4.2.2 и хочу запустить функциональные тесты с Gitlab-CI.Но я сталкиваюсь с этой проблемой:

A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.

Странно то, что у меня есть эта проблема локально, но только в первый раз, когда я запускаю модульные тесты после перестройки кэша.Во второй раз, когда я запускаю модульные тесты, ошибка больше не вызывается.

Я использую версию 5.2.4 sensio / framework-extra-bundle, которая должна была устранить проблему, как сказано здесь .

Эта ошибка делает мою работу неудачной каждый раз, несмотря на то, что все тесты в порядке.

Я убедился, что использовал класс Symfony\Bundle\FrameworkBundle\Test\WebTestCase в своих функциональных тестах.Я также удостоверился, что все мои зависимости обновлены.

Вот пример функционального теста, который я написал:

<?php

namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

/**
 * Class MigrationControllerTest
 *
 * @group functional
 */
class MigrationControllerTest extends WebTestCase
{
    public function testNotAllowed()
    {
        $client = static::createClient();

        $client->request('UPDATE', '/migrate');
        $this->assertEquals(405, $client->getResponse()->getStatusCode());
    }
}

А вот моя конфигурация CI:

image: my.private.repo/images/php/7.2/symfony:latest

cache:
  paths:
    - vendor/

before_script:
  - composer install

services:
  - mysql:5.7

unit_test:
  script:
    # Set up database
    - bin/console doctrine:schema:update --env=test --force
    # Load fixtures
    - bin/console doctrine:fixtures:load --env=test --no-interaction
    # Build assets with Webpack Encore
    - npm install
    - npm run build
    # Enable xdebug for code coverage
    - docker-php-ext-enable xdebug
    # Run unit tests
    - php bin/phpunit --coverage-text --colors=never

Я ожидаю, что выходные данные покажут все пройденные тесты, но фактические выходные данные:

PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

Testing Project Test Suite
.2019-02-04T14:48:29+01:00 [error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: "No route found for "UPDATE /migrate": Method Not Allowed (Allow: GET, POST)" at /home/goulven/PhpStorm/user-balancer/vendor/symfony/http-kernel/EventListener/RouterListener.php line 143
.........                                                        10 / 10 (100%)

Time: 8.44 seconds, Memory: 52.25MB

OK (10 tests, 17 assertions)

Remaining deprecation notices (4)

  4x: A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.
    4x in MigrationControllerTest::testMigrateFail from App\Tests\Controller

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Если это происходит только в первый раз, это означает, что ошибка возникает во время прогрева кэша.Если вы не хотите искать основную причину, добавьте прогрев к вашему before_script, например:

- php bin/console cache:warmup --env=test

Это гарантирует, что кэшированный контейнер будет создан до того, как будет выполнен первый тестовый сценарий, так что ваш тестслучаи, на которые не влияют проблемы контейнеростроения

0 голосов
/ 04 февраля 2019

Благодаря @SergheiNiculaev я только что добавил следующую строку в файл phpunit.xml.dist:

<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>

[EDIT] Другое решение состоит в добавлении следующей строки в конфигурацию CIфайл:

variables:
  # ...
  SYMFONY_DEPRECATIONS_HELPER: weak
...