Наследование PHPUnit Symfony v3.4 устарело - PullRequest
0 голосов
/ 03 июня 2018

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

Остальные уведомления об устаревании (1)

1x: Наследование пакетов устарело с 3.4 и будет удалено в 4.0.1x в GeoTest :: testDistanceDuration из 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);
}

Ответы [ 2 ]

0 голосов
/ 13 августа 2018

Видеть - значит верить .

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

Наследование пакетов устарело с версии 3.4 и будет удалено в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?

Этот механизм наследования былТрадиционно используется для переопределения некоторых шаблонов, контроллеров и других элементов сторонних пакетов.В Symfony 4.0 вам нужно использовать альтернативные решения для переопределения этих элементов.

0 голосов
/ 03 июня 2018

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

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

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

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

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

, но я обнаружил, что ошибка вызвана `$ 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>
...