2010-03-19 5 views
2

De l'Jobeet tutorial fourni sur le site Symfony, je trouve que je peux charger des données fixtures chaque fois que je lance test unitaire en utilisant ce script:Symfony - Supprimer et recharger tous les enregistrements de base de données pour chaque test

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

Cependant , Je veux supprimer et recharger tous les enregistrements de la base de données chaque fois que je lance un test unitaire. Actuellement, je le fais manuellement (Exécuter symfony doctrine: build --all avant chaque test). Quelqu'un peut-il me fournir une bonne façon de faire cela?

+0

Ceci est un doublon du fil avec cette grande réponse: http: // stackoverflow.com/a/7119887/187273 – cmc

Répondre

2

J'utilise ce qui suit dans mon test/bootstrap/fichier unit.php à la fin.

$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")); 

avant le chargement des appareils en Cela fonctionne bien pour moi, même si elle peut obtenir lent si vous avez un grand schéma et beaucoup de luminaires. Il ya quelques conseils sur the Web Mozarts blog sur l'écriture de tests efficaces, et il y a un conseil sur l'utilisation d'une base de données en mémoire sqlite pour l'accélérer.

+0

Fonctionne parfaitement. Merci ! – Andree

1

Si vous voulez simplement effacer les tables, vous pouvez le faire en ajoutant des tableaux vides à vos appareils, puis en utilisant 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 
+0

Notez que cela ne réinitialisera pas le nombre d'ID, donc vous devrez utiliser la méthode de Richsage si vous avez besoin de le faire. – evilcelery

+0

Beaucoup plus rapide que de laisser tomber, créer, peupler toute la base de données. Merci! – deadwards

Questions connexes