我想在symfony flex中使用behat 当我在构造函数中的behat上下文文件中注入服务时,autowire不起作用。 我需要明确地将服务配置为public以在behat中使用该服务。 是否有另一种方法可以在behat上下文文件中注入服务而不公开它?
我在这里得到以下错误 编译容器时,“App \ DataConsumer”服务或别名已被删除或内联。您应该将其公开,或者直接停止使用容器并改为使用依赖注入。
behat.yml
default:
suites:
default:
contexts:
- FeatureContext:
kernel: '@kernel'
- ImageConsumerContext:
dataConsumer: '@App\DataConsumer'
答案 0 :(得分:1)
<强>更新强>
从Symfony 4.1开始,它允许从测试中获取私有服务。
默认情况下&#34;私人服务的唯一缺点是&#34;是测试比以前更难。一些开发人员甚至在测试环境中定义了一些配置,以便在测试中公开所有服务。在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'