После обновления до 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);
}
@gp_sflover Я тоже пробовал метод функционального тестирования, он по-прежнему дает мне ту же ошибку.
Я еще не обновил ни один проект :-) (как и любые тесты), но что вы думаете, чтобы сделать простой тест на новой установке Symfony 4.1, чтобы затем исключить (если он дает вам ту же ошибку), что проблема в не из-за не обновленных документов? Так странно...






Это не совсем ошибка, даже если он отображается на красном фоне. Это уведомление, но ваш тест проходит.
Согласно Документация по наследованию пакетов Symfony 3.4:
Bundle inheritance is deprecated since Symfony 3.4 and will be removed in 4.0.
Так что, возможно, по вашей собственной логике вы расширите еще один пакет. Вам следует проверить свой AppBundle или все, что у вас есть. Или вы используете сторонний пакет (установленный с Композитор), который делает то же самое.
У вас есть решения 2:
Редактировать:
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. Если тест проходил, то я мог бы его замолчать, но это не так.
Вы не показали отчет о своем тесте, вы показали только отчет об амортизации, как мы могли узнать, как решить вашу проблему? Y
Таким образом, уведомление об устаревании не является конкретной ошибкой. Пожалуйста, отредактируйте свой пост и добавьте точный отчет об ошибке, чтобы предложить соответствующее решение.
Отчет об испытаниях показывает эту ошибку: Error : Call to undefined method Symfony\Component\Yaml\Parser::parseFile()
Возможно, ваш тест использует имитацию вашего Yaml Parser. Есть ли какая-то логика с использованием Yaml Parser при вызове метода getDistanceDuration Geo Service? Я подозреваю, что парсер Yaml не создается из контейнера
обновление phpunit до 5.7.27 делает его работающим с ошибкой уведомления
Пока не увижу, не поверю.
Предположим, сообщение об устаревании звучит так:
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.
Возможно, я устал, но Функциональные тесты такие же и в Symfony4, а устаревание относится к Наследование пакета. Может ошибка в документации? Возможно, вы переопределите что-то связанное с этим тестом, используя наследование пакетов?