将自定义服务注入 Behat 上下文

Inject custom service into Behat context

是否可以构建我自己的自定义服务并将其注入 Behat 上下文 class?

我正在将 Behat 与 Symfony2 集成,我可以像这样将 Symfony 的服务注入我的上下文中:

contexts:
    - Meeebu\MyBundle\Features\Security\Context\SecurityContext:
        session:    '@session'

前提是 Behat\Symfony2Extension 已注册。

我也在使用 Behat Page Object ExtensionPage 对象直接注入上下文构造函数,所以我的构造函数目前看起来像这样:

public function __construct(Session $session, Homepage $homepage, WelcomeAdmin $welcomeAdminPage)

现在,我想在 Context class 中使用我的自定义服务。

如何在 Behat 中创建、注册和注入它们?

您需要创建并注册一个 behat 扩展:https://github.com/Behat/Behat/blob/2.5/src/Behat/Behat/Extension/ExtensionInterface.php

然后在load方法中注册你的服务(或者加载一个yml/xml/etc.文件)。 然后将扩展名 class 添加到 behat.yml 到扩展部分。