2016-06-23 15 views
0

dieser Rails Modelle Gegeben:rspec Fabrik Mädchen Pass Assoziation zu Assoziation

class Human 
    has_many :pets 
    has_many :vet_visits 
end 
class Pet 
    belongs_to :human 
    has_many :vet_visits 
end 
class VetVisit 
    belongs_to :human 
    belongs_to :pet 
end 

Ich brauche eine rspec Fabrik, um eine VetVisit zu machen. Aber:

Ergebnisse in einem vet_visit mit einem Menschen und einem Haustier, die nicht das jeweilige Haustier/Mensch des anderen sind.

Wie mache ich eine Fabrik, die eine vet_visit erstellt, die ein Haustier mit einem Menschen hat, der der gleiche Mensch ist, auf den der vet_visit verweist?

jeden Zweifel zu löschen, ich bin nicht in der Tat ein vetinary System zu machen, ist dies ein abstraktes Beispiel aus einem komplexeren System, das menschliche entfernen und in dem Code vet_visit.pet.human tut nicht geeignet ist

Antwort

2

Wenn Sie einen Tierarztbesuch benötigen, der sich auf ein bestimmtes Haustier und einen Menschen bezieht, dann bauen Sie es in Ihrer Spezifikationsdatei auf.

let(:vet_visit) { FactoryGirl.create(:vet_visit, human: human, pet: pet) }

Dies setzt voraus, Sie haben bereits ein Mensch und Tier in der Spec-Datei erstellt.

+0

, In der Tat in vielen Fällen macht es Sinn, es auf diese Weise zu tun. In komplexeren Beispielen kann dies bedeuten, dass Hunderte von Leets definiert und weitergegeben werden. Sie könnten dann darauf bestehen, stattdessen YAML-Strukturen zu importieren, aber im Interesse, komplette selbständige Fabriken zu haben, schaue ich, ob es einen Weg gibt, es in FactoryGirl – xxjjnn

+0

zu tun. Wenn Ihr Test so viele Anforderungen erfüllt, müssen Ihre Tests möglicherweise umstrukturiert werden. Wie unterscheidet sich Ihr Testkonzept, wenn Sie sagen, 6 im Vergleich zu den 100. Wenn Sie Hunderte von lets benötigen, können Sie wahrscheinlich eine Schleife schreiben, um solche Dinge zu tun, aber ich verstehe nicht, warum eine Spezifikationsdatei 100s benötigt so definierte Variablen. – MageeWorld