Symfony - 删除并重新加载每个测试的所有数据库记录

时间:2010-03-19 11:48:24

标签: symfony1 doctrine

从Symfony网站提供的Jobeet tutorial,我发现每次运行单元测试时都可以使用此脚本加载灯具数据:

Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');

但是,每次运行单元测试时,我都希望删除重新加载来自数据库的所有记录。目前,我正在手动执行此操作(在每次测试之前运行 symfony doctrine:build --all )。有人能为我提供正确的方法吗?

2 个答案:

答案 0 :(得分:2)

我在最后的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内存数据库来加速它的提示。

答案 1 :(得分:1)

如果您只想清除表格,可以通过向灯具添加空数组,然后使用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