Symfony - удаляет и перезагружает все записи базы данных для каждого теста - PullRequest
2 голосов
/ 19 марта 2010

Из учебника Jobeet , представленного на веб-сайте Symfony, я обнаружил, что могу загружать данные приборов каждый раз, когда запускаю модульное тестирование, используя этот скрипт:

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

Однако я хочу удалить и перезагрузить все записи из базы данных каждый раз, когда я запускаю модульный тест. В настоящее время я делаю это вручную (запускайте доктрину Symfony: build --all перед каждым тестом). Может кто-нибудь предоставил мне правильный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

В конце я использую следующее в моем файле 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"));

перед загрузкой приборов. Это хорошо работает для меня, хотя может быть медленным, если у вас большая схема и много приборов. В блоге Web Mozarts есть несколько советов по написанию эффективных тестов, а также совет по использованию базы данных sqlite в памяти для ускорения.

1 голос
/ 03 марта 2011

Если вы хотите просто очистить таблицы, вы можете сделать это, добавив пустые массивы в ваши приборы, а затем используя 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
...