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'
Другие вопросы по тегам