2009-09-08 10 views
0

J'ai une grande liste d'enregistrement (quelque chose comme 20, pourrait être plus) avec un has_many: à travers les relations, ce qui est un peu compliqué et il semble moche sur yml. Factory_girl ne semble pas me donner la capacité simpliste de créer simplement le projecteur avec un script AR (c'est beaucoup plus court de cette façon) toute bonne recommandation sur ce que je pourrais faire?Création d'objets batch Rails pour l'appareil?

Répondre

0

Vous pouvez ré-ouvrir votre modèle dans votre fichier d'usines et ajouter une méthode pour créer les enregistrements de test. Quelque chose comme:

class User 
    after_create :create_records_for_testing 
    def create_records_for_testing 
    # code to create records 
    end 
end 

Bien sûr, cela pourrait causer de la confusion sur la route parce que le modèle que vous testez ne se comporte pas le même que le modèle que vous utilisez dans votre application. Peut-être qu'il y a un meilleur moyen?

+0

Ceci est très mal! Vous pouvez également modifier d'autres pars dans votre modèle d'utilisateur et interrompre tous les tests du système (ou les faire tous passer quand ils ne le devraient pas). Ne pas singe-patch nos modèles pour les tests! – Ariejan

+0

Une meilleure idée pourrait être d'utiliser quelque chose comme ce patch pour Factory Girl: http://stackoverflow.com/questions/1506556/hasmany-while-respecting-strategy-in-factorygirl – eremite

2

Ne pas modifier le singe! Utilisez Factory Girl! (Elle est douce):

Factory.define(:user) do |t| 
    t.factory { |a| a.assocation(:factory) } 
end 

Factory.define(:factory) do |t| 
    t.name "Test Factory" 
end 

Dans nos spécifications font ceci:

before(:each) do 
    @factory = Factory(:factory) 
    20.times do 
    Factory(:user, :factory => @factory) 
    end 
end 
+0

Vous pouvez également utiliser les séquences de Factory Girl pour générer des noms d'usine uniques, ou ajouter des noms d'utilisateur et similaires facilement. – Ariejan

Questions connexes