Symfony - 删除并重新加载每个测试的所有数据库记录
Posted
技术标签:
【中文标题】Symfony - 删除并重新加载每个测试的所有数据库记录【英文标题】:Symfony - Delete and reload all database records for each test 【发布时间】:2010-03-19 11:48:24 【问题描述】:从 Symfony 网站提供的Jobeet tutorial 中,我发现每次使用此脚本运行单元测试时,我都可以加载fixtures 数据:
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');
但是,我想在每次运行单元测试时删除并重新加载数据库中的所有记录。目前,我正在手动执行此操作(在每次测试之前运行 symfony 学说:build --all)。有人可以为我提供正确的方法吗?
【问题讨论】:
这是与这个很好的答案线程的副本:***.com/a/7119887/187273 【参考方案1】:我最后在我的 test/bootstrap/unit.php 文件中使用了以下内容:
$doctrine = new sfDoctrineDropDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--no-confirmation","--env=test"));
$doctrine = new sfDoctrineBuildDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--env=test"));
$doctrine = new sfDoctrineInsertSqlTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--env=test"));
在加载固定装置之前。这对我来说效果很好,尽管如果您有一个大型架构和大量固定装置,它可能会变慢。 the Web Mozarts blog 上有一些关于编写高效测试的技巧,还有关于使用 sqlite 内存数据库来加快速度的技巧。
【讨论】:
【参考方案2】:如果您只想清除表格,您可以通过将空数组添加到您的固定装置,然后使用Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');
#Tables to emtpy
User: []
Post: []
#Tables to load fixtures
Country:
country1:
name: United Kingdom
country2:
name: USA
【讨论】:
请注意,这不会重置 ID 计数,因此如果您需要这样做,则需要使用 Richsage 的方法。 比删除、创建、填充整个数据库要快得多。谢谢!以上是关于Symfony - 删除并重新加载每个测试的所有数据库记录的主要内容,如果未能解决你的问题,请参考以下文章