当我在构造函数内的behat上下文文件中注入服务时,我想将behat与symfonyflex一起使用,autowire不起作用。我需要显式地将服务配置为public,以便在behat中使用该服务。有没有其他方法可以在不公开的情况下在behat上下文文件中注入服务?
在这里,我得到下面的错误"应用\数据消费者"服务或别名已被删除或内联时,容器被编译。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。
behat.yml
default:
suites:
default:
contexts:
- FeatureContext:
kernel: '@kernel'
- ImageConsumerContext:
dataConsumer: '@App\DataConsumer'
更新:
从Symfony4.1开始,允许从测试中获取私有服务。
“默认私有服务”唯一剩下的缺点是测试比以前更加困难。一些开发人员甚至在测试环境中定义了一些配置,以便在测试中公开所有服务。在symfony4.1中,我们也做了同样的测试,现在测试默认允许获取私有服务。
来源:https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing
您可以仅为您的测试环境公开该服务。
在配置/services_test.yaml中添加:
services:
...
test.App\DataConsumer: '@App\DataConsumer'
然后在你的behat.yml:
default:
suites:
default:
contexts:
- FeatureContext:
kernel: '@kernel'
- ImageConsumerContext:
dataConsumer: '@test.App\DataConsumer'