Behat с Symfony Flex
Я хочу использовать behat с symfony flex Когда я внедряю сервис в контекстный файл behat внутри конструктора, autowire не работает. Мне нужно явно настроить службу для общего пользования, чтобы использовать эту службу в Beat. Есть ли другой способ внедрить сервис в контекстный файл behat, не делая его публичным?
Здесь я получаю ошибку ниже Служба или псевдоним App\DataConsumer была удалена или встроена при компиляции контейнера. Вы должны либо сделать его общедоступным, либо прекратить использование контейнера напрямую и использовать вместо него внедрение зависимостей.
behat.yml
default:
suites:
default:
contexts:
- FeatureContext:
kernel: '@kernel'
- ImageConsumerContext:
dataConsumer: '@App\DataConsumer'
1 ответ
ОБНОВИТЬ:
Начиная с Symfony 4.1 разрешено извлекать частные тесты из тестов.
Единственный оставшийся недостаток "частных служб по умолчанию" заключается в том, что тестирование было сложнее, чем раньше. Некоторые разработчики даже определили некоторые конфигурации в тестовой среде, чтобы сделать все сервисы общедоступными в тестах. В Symfony 4.1 мы делали то же самое, и теперь тесты позволяют получать частные сервисы по умолчанию.
Источник: https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing
Вы можете сделать сервис только общедоступным для вашей тестовой среды.
В config/services_test.yaml
добавлять:
services:
...
test.App\DataConsumer: '@App\DataConsumer'
Тогда в вашем behat.yml:
default:
suites:
default:
contexts:
- FeatureContext:
kernel: '@kernel'
- ImageConsumerContext:
dataConsumer: '@test.App\DataConsumer'