Перезапись контейнерных сервисов Symfony 3.3 в тестах контроллеров

У меня есть серия тестов для контроллеров, которые используют сторонние API, которые должны быть смоделированы в тестовой среде. Мы переопределяем клиентский сканер функционального тестирования и макетируем зависимости, с которыми нам нужно тестировать. Ключевым моментом здесь является то, что макеты меняются при каждом тесте.

В Symfony 3.2 это работало нормально, но в Symfony 3.3 у меня есть ряд предупреждений об устаревании из-за способа внедрения сервисов:

Пример тестового примера контроллера:

class MyControllerTest extends WebTestCase
{
private static $kernelModifier = null;

public function setKernelModifier(\Closure $kernelModifier)
{
self::$kernelModifier = $kernelModifier;
$this->ensureKernelShutdown();
}

protected static function createClient(array $options = [], array $server = [])
{
static::bootKernel($options);

if ($kernelModifier = self::$kernelModifier) {
$kernelModifier->__invoke();
self::$kernelModifier = null;
};

$client = static::$kernel->getContainer()->get('test.client');
$client->setServerParameters($server);

return $client;
}

protected function getPropertyClient()
{
$mockService = (new PropertyMock())->getPropertyMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}

protected function getPropertyFailureClient()
{
$mockService = (new PropertyMock())->getPropertyFailureMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}
}

Фактический тест:

public function testInvalidPropertyRequest()
{
$client = $this->getPropertyClient();
$client->request(
'POST',
'/webhook/property',
[],
[],
[],
''
);
$this->assertEquals(400, $client->getResponse()->getStatusCode());
}

Ошибка устаревания:

Установка предопределенного сервиса app.property_service
устарел с Symfony 3.3 и больше не будет поддерживаться в Symfony
4.0: 3х

Я ознакомился с документацией к выпуску 3.3, перерывами и устаревшими версиями BC и не могу понять, как бы я заменил службы контейнеров на mocks после их настройки.

Любая помощь приветствуется.

7

Решение

Я также сталкиваюсь с этой проблемой, и в классе Container нет подсказок о том, как справиться с этим устареванием.

// для всех желающих, есть текущий номер открыть на github — но нет реального решения, кроме как иметь намного больше кода начальной загрузки для ваших модульных тестов или перейти к тестированию контроллеров изолированно.
Я бы рекомендовал, чтобы все контроллеры были определены как сервисы с фиксированными / определенными зависимостями и без прямого использования DIC.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]