Работа с Symfony Flex

Я хочу использовать behat с symfony flex. Когда я добавляю службу в контекстный файл behat внутри конструктора, автосвязь не работает. Мне нужно явно настроить службу как общедоступную, чтобы использовать эту службу по своему усмотрению. Есть ли другой способ внедрить службу в файл контекста behat, не делая его общедоступным?

Здесь я получаю следующую ошибку. Служба или псевдоним «App\DataConsumer» был удален или встроен при компиляции контейнера. Вы должны либо сделать его общедоступным, либо прекратить использовать контейнер напрямую и вместо этого использовать внедрение зависимостей.

behat.yml
   default:
     suites:
       default:
         contexts:
            - FeatureContext:
                 kernel: '@kernel'

            - ImageConsumerContext:
                 dataConsumer: '@App\DataConsumer'

person user8693894    schedule 20.11.2017    source источник


Ответы (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'
person Jeroen Fiege    schedule 26.02.2018