当cleanup = true时,在代码中动态更改实体管理器

时间:2015-03-31 17:49:37

标签: doctrine-orm entitymanager codeception

我使用Cest类进行单元测试,每个实体都有一个测试类,我可以执行一些可以读/写数据库记录的测试。

我使用PostgreSQL,其中实体可以是不同模式的一部分,因此Entity1是Schema1的一部分,它使用EntityManager1而Entity2是Schema2的一部分并使用EntityManager2。

每个Cest类在开始测试之前在_before方法中定义了Doctrin2模块的$ em实体,它工作正常。

当我设置cleanup = true来封装测试在事务中时,它无法清理(回滚事务),因为在初始化期间,代码运行首先运行Doctrin2模块的_before方法,其中每个初始/当前实体管理器设置事务。当我在Cest中更改实体管理器时,初始实体管理器无法跟踪在不同实体管理器中发生的那些更改,并认为在测试结束时无需回滚。

# unit.suite.yml
modules:
enabled: [Symfony2, Doctrine2, Asserts, UnitHelper]
config:
      Doctrine2:
          cleanup: true

我可以在Cest中作为嵌套事务开始我自己的事务,但它反对DRY原则。可以在_bootstrap文件中初始化正确的实体管理器,但它不会是动态的,我不知道如何根据Cest运行的那些更改它。

在运行Doctrin2模块的_before方法之前是否可以更改实体管理器?也许根本不需要使用任何操作,所有这些都可以通过其他一些设置来实现(比如每个实体的测试套装等)?

0 个答案:

没有答案