简体   繁体   English

如何设置 Doctrine 测试以自动回滚事务(以避免弄脏数据库)?

[英]How to setup a Doctrine test to have automatic rollback of the transaction (to avoid dirtying db)?

I would like to have tests dealing with Doctrine not persist stuff in the main Symfony dev database.我希望处理 Doctrine 的测试不会在主 Symfony 开发数据库中持久化内容。 Preferably by not storing stuff at all (rolling back per test).最好根本不存储东西(每次测试回滚)。 How would I do this?我该怎么做? Are there ready-made frameworks/libs/setups I can use?我可以使用现成的框架/库/设置吗?

At work we have a really smooth working Java setup where database tests extends custom JUnit test classes we have created.在工作中,我们有一个非常流畅的 Java 设置,其中数据库测试扩展了我们创建的自定义 JUnit 测试类。 TransactionallyIsolatedITest for running everything within a transaction that is rolled back (fast), FullyIsolatedITest for testing stuff that do their own begin() , commit() , stuff, etc. This creates and tears down a database created from a template for each test (heavy/slow). TransactionallyIsolatedITest用于在回滚(快速)的事务中运行所有内容, FullyIsolatedITest用于测试自己的begin()commit()等内容。这将为每个测试创建并拆除从模板创建的数据库(重/慢)。

Having something like this would be beautful when doing Symfony development in PHP.在 PHP 中进行 Symfony 开发时,拥有这样的东西会很漂亮。

You could try overriding the setUp method, inside that you can get the enityManager instance like this $em = self::getContainer()->get('doctrine')->getManager();您可以尝试覆盖setUp方法,在其中您可以获得这样的 enityManager 实例$em = self::getContainer()->get('doctrine')->getManager(); and then purge the database via the Doctrine ORM purger然后通过 Doctrine ORM purger 清除数据库

$purger = new Doctrine\Common\DataFixtures\Purger\ORMPurger($em);
$purger->purge();

在 Symfony 6 文档中,他们实际上描述并展示了如何在每次测试之前使用DAMADoctrineTestBundle重置数据库。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM