2012-10-31 1 views
2

J'utilise actuellement cucumber et databasecleaner pour tester mon application. Et actuellement dans mon env.rb i ont la configuration de l'aspirateur comme:En utilisant cucumber et databasecleaner puis-je garder une seule entrée dans une table?

DatabaseCleaner.strategy = :truncation, {:except => %w[TABLE]} 
After do 
    DatabaseCleaner.clean 
end 

De cette façon, je peux conserver les données dans TABLE. Mais je voudrais aussi garder une seule entrée dans une table différente entre les tests. Est-ce que je peux y arriver ou est-ce que je dois le recréer tout le temps avec un crochet Before?

+0

Vous voulez donc supprimer toutes les lignes sauf une de votre deuxième table? –

+0

Oui, c'est correct. –

Répondre

0

Je peux penser à ce hack. Ajoutez un ON DELETE trigger sur cette table de votre test ENV DB. Le déclencheur appelle une fonction qui insère la ligne. Vous devrez peut-être ajouter une vérification dans la fonction pour ne rien faire si la ligne existe déjà.

+0

pourriez-vous me donner un exemple? Je ne suis pas sûr de la façon dont vous avez l'intention de faire, dois-je modifier mon DB? –

+0

Oui, vous devrez modifier votre DB de test. Par exemple. pour créer un trigger dans postgres 'CREATE TRIGGER mon_trigger AFTER DELETE ON my_table POUR CHAQUE ROW EXECUTE PROCEDURE add_row();' Et vous devrez aussi créer la fonction add_row() dans la base de données qui insère la ligne si elle n'existe pas déjà – Manish

+0

I ne peut pas éditer la base de données, il est hors de mon contrôle, donc tous les modèles de vues et de contrôles. –

Questions connexes