从Symfony网站提供的Jobeet tutorial,我发现每次运行单元测试时都可以使用此脚本加载灯具数据:
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');
但是,每次运行单元测试时,我都希望删除并重新加载来自数据库的所有记录。目前,我正在手动执行此操作(在每次测试之前运行 symfony doctrine:build --all )。有人能为我提供正确的方法吗?
答案 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