Я настраиваю приложение 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
Благодаря @SergheiNiculaev, я просто добавил следующую строку в phpunit.xml.dist
файл:
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
[РЕДАКТИРОВАТЬ]
Другое решение состоит в добавлении следующей строки в файл конфигурации CI:
variables:
# ...
SYMFONY_DEPRECATIONS_HELPER: weak
Если это происходит только в первый раз, это означает, что ошибка возникает во время прогрева кеша. Если вы не хотите искать основную причину, добавьте прогрев к вашему before_script
лайк:
- php bin/console cache:warmup --env=test
Это гарантирует, что кэшированный контейнер будет создан до того, как будет выполнен первый тестовый пример, так что ваши тестовые примеры не будут затронуты проблемами построения контейнера