PHPUnit Symfony v3.4 наследование устарело

После обновления до Symfony v3.4. Я продолжаю получать следующую ошибку в тесте PHPUnit.

Remaining deprecation notices (1)

1x: Bundle inheritance is deprecated as of 3.4 and will be removed in 4.0. 1x in GeoTest::testDistanceDuration from Tests\AppBundle\Util\Geo

Ниже приведен тестовый файл

namespace Tests\AppBundle\Util\Geo;

use AppBundle\Util\Geo\GeoException;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class GeoTest extends WebTestCase {
    public function testDistanceDuration ()
    {
        $client = $this->createClient();

        $geo = $client->getContainer()->get('geo');

        $returnData = $geo->getDistanceDuration([51, -0.34], [51, -0.11]);

        $this->assertArrayHasKey('distance', $returnData);
        $this->assertArrayHasKey('duration', $returnData);
        $this->assertGreaterThan(0, $returnData['distance']);
        $this->assertGreaterThan(0, $returnData['duration']);
    } 
}

Как я могу исправить эту проблему?

Отредактировал, еще один простой тест, который не проходит и выдает ошибку.

public function testShowPost()
{
    $client = static::createClient(); // < this is causing the error

    $this->assertEquals(200, 200);
}

Возможно, я устал, но Функциональные тесты такие же и в Symfony4, а устаревание относится к Наследование пакета. Может ошибка в документации? Возможно, вы переопределите что-то связанное с этим тестом, используя наследование пакетов?

gp_sflover 03.06.2018 01:58

@gp_sflover Я тоже пробовал метод функционального тестирования, он по-прежнему дает мне ту же ошибку.

Basit 03.06.2018 02:03

Я еще не обновил ни один проект :-) (как и любые тесты), но что вы думаете, чтобы сделать простой тест на новой установке Symfony 4.1, чтобы затем исключить (если он дает вам ту же ошибку), что проблема в не из-за не обновленных документов? Так странно...

gp_sflover 03.06.2018 02:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
1 202
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это не совсем ошибка, даже если он отображается на красном фоне. Это уведомление, но ваш тест проходит.

Согласно Документация по наследованию пакетов Symfony 3.4:

Bundle inheritance is deprecated since Symfony 3.4 and will be removed in 4.0.

Так что, возможно, по вашей собственной логике вы расширите еще один пакет. Вам следует проверить свой AppBundle или все, что у вас есть. Или вы используете сторонний пакет (установленный с Композитор), который делает то же самое.

У вас есть решения 2:

  1. Исправьте устаревание, обновив свою собственную логику или обновив сторонний пакет, вызывающий это устаревание. Если в этом пакете нет обновлений, вам следует подумать о том, чтобы прекратить его использование.
  2. Вам следует использовать Мост PHPUnit to молчать об этом уведомлении об устаревании, если вы не хотите исправлять это прямо сейчас (очевидно, на свой страх и риск). Особенно по Пометка теста как устаревшего

Редактировать:

but I found the error is caused by ` $client = static::createClient();

Также проверьте, правильно ли вы указали путь для ядра в вашем phpunit.xml.dist:

<?xml version = "1.0" charset = "utf-8" ?>
<phpunit>
    <php>
        <server name = "KERNEL_DIR" value = "/path/to/your/app/" />
    </php>
    <!-- ... -->
</phpunit>

Он не проходит проверку. Я попробовал очень простой тест, но обнаружил, что ошибка вызвана кодом $ client = static :: createClient ();, который также является частью всех тестов и примеров тестов Symfony. Если тест проходил, то я мог бы его замолчать, но это не так.

Basit 03.06.2018 15:53

Вы не показали отчет о своем тесте, вы показали только отчет об амортизации, как мы могли узнать, как решить вашу проблему? Y

Franck Gamess 03.06.2018 16:17

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

Franck Gamess 03.06.2018 17:35

Отчет об испытаниях показывает эту ошибку: Error : Call to undefined method Symfony\Component\Yaml\Parser::parseFile()

Basit 04.06.2018 12:34

Возможно, ваш тест использует имитацию вашего Yaml Parser. Есть ли какая-то логика с использованием Yaml Parser при вызове метода getDistanceDuration Geo Service? Я подозреваю, что парсер Yaml не создается из контейнера

Franck Gamess 04.06.2018 12:43

обновление phpunit до 5.7.27 делает его работающим с ошибкой уведомления

Basit 04.06.2018 13:26

Пока не увижу, не поверю.

Предположим, сообщение об устаревании звучит так:

Bundle inheritance is deprecated as of 3.4 and will be removed in 4.0.

Что это значит? Это может означать, что вы / кто-то создали пакет (например, MyBundle), который переопределяет функцию getParent() следующим образом:

class MyBundle extends Bundle
{
    /**
    * Returns the bundle parent name.
    *
    * @return string|null The Bundle parent name it overrides or null if no parent
    */
    public function getParent()
    {
        return 'Some3rdPartyBundleName';
    }
...

Это больше не поддерживается, начиная с Symfony 4.0. Поэтому, просто удалив эту реализацию, предупреждение об устаревании должно исчезнуть.

Но все равно почему мы использовали наследование пакетов до Symfony 4?

This inheritance mechanism was traditionally used to override some templates, controllers and other elements of third-party bundles. In Symfony 4.0 you'll need to use alternative solutions to override those elements.

Другие вопросы по теме