从 Behat 上下文创建 Doctrine 对象 class

Creating Doctrine objects from a Behat Context class

情况

我有一个 Symfony2 项目。我想在 Behat 测试期间创建 Doctrine 对象。为此,我需要从 FeatureContext class.

中访问 EntityManager

我的尝试

我有我的 FeatureContext class 扩展 RawMinkContext,它又扩展了 BehatContext

然后我尝试按照 the documentation 访问容器或实体管理器。

class FeatureContext extends RawMinkContext
{
    /**
     * @Given /^I have some disciplines$/
     */
    public function iHaveSomeDisciplines()
    {
        $em = $this->getEntityManager();
        $container = $this->getContainer();
    }

但是这些都不起作用,因为 none 的 classes FeatureContext 继承自可以访问它。据我所知,只有 Controller 可以。

问题

如何从我的 FooContext classes 中访问 Doctrine?

不确定 Behat 测试如何工作,但是否可以将您的 class 变成服务并注入实体管理器?

通过以下方式将内核注入到您的上下文中:

Behat2

class FeatureContext extends RawMinkContext implements KernelAwareContext

Behat3

class FeatureContext extends RawMinkContext
{
    use KernelDictionary

然后可以如下获取实体管理器:

$this->getKernel()->getContainer()->get('doctrine.orm.entity_manager');