在Behat FeatureContext中,Symfony2 TokenStorage始终为空

时间:2016-02-09 09:39:46

标签: symfony behat

我已经使用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中,但它似乎与当前正在运行的实际应用程序无关 - 它始终是空的。

我很感激你的建议。感谢。

1 个答案:

答案 0 :(得分:2)

Behat注入您的上下文的服务与您的应用程序使用的服务不同。 Behat引导它自己的Symfony服务容器实例。由于您尚未在Behat上下文中执行身份验证过程,因此未创建身份验证令牌。

由于您使用selenium驱动程序,因此您实际上并未使用Symfony扩展来发出请求,并且除了通过其UI(html)之外您无权访问该应用程序。

即使您使用Symfony2Extension发出请求(通过配置symfony2驱动程序),它也会在每个请求上引导容器的新实例。您可以做的是访问Symfony分析器,它可能会为您提供所需的一些信息。