我已经使用Symfony2Extension设置Behat以开始测试应用程序。
设置完SF2Extension后,我能够将Symofny服务注入到我的Behat环境中:
contexts:
- My\AppBundle\Features\Security\Context\FeatureContext:
session: '@session'
tokenStorage: '@security.token_storage'
FeatureContext的构造函数:
public function __construct(Session $session, TokenStorage $tokenStorage)
现在我无法克服的问题是$tokenStorage
在测试/场景执行时总是为空(他们在普通浏览器中使用Selenium执行)。我的方案有一个用户成功登录到SF2应用程序,因此存在一个令牌和一个非空的TokenStorage。
虽然$tokenStorage
对象被注入到Context中,但它似乎与当前正在运行的实际应用程序无关 - 它始终是空的。
我很感激你的建议。感谢。
答案 0 :(得分:2)
Behat注入您的上下文的服务与您的应用程序使用的服务不同。 Behat引导它自己的Symfony服务容器实例。由于您尚未在Behat上下文中执行身份验证过程,因此未创建身份验证令牌。
由于您使用selenium驱动程序,因此您实际上并未使用Symfony扩展来发出请求,并且除了通过其UI(html)之外您无权访问该应用程序。
即使您使用Symfony2Extension发出请求(通过配置symfony2驱动程序),它也会在每个请求上引导容器的新实例。您可以做的是访问Symfony分析器,它可能会为您提供所需的一些信息。