Mein Problem scheint sehr verbreitet, aber ich habe keine Antwort in der Dokumentation oder im Internet selbst gefunden.
Es könnte ein Klon dieser Frage scheinen, has_many respektieren build strategie in factory_girl aber 2,5 Jahre nach diesem Post hat sich factory_girl stark verändert.
Ich habe ein Modell mit einer has_many-Beziehung namens fotos. Ich möchte das bevölkern, das hat viele Beziehungen, die meine Wahl der Baustrategie beibehalten.
Wenn ich offering = FactoryGirl.build_stubbed :offering, :stay
anrufe, erwarte ich, dass offering.photos
eine Sammlung von Stub-Modellen ist.
Der einzige Weg, den ich gefunden habe, um dies zu erreichen, ist dieser:
%Vor%Es muss nicht gesagt werden, dass es einen besseren Weg dafür geben muss.
Ideen?
Sie können die verschiedenen Callbacks von FactoryGirl verwenden:
%Vor% Andere Antworten haben einen Fehler, die inverse Zuordnung wird nicht richtig initialisiert, z. offering.photos.first.offering == offering
ist false
. Noch schlimmer ist, dass das offering
ein neues Offering
für jedes photos
ist.
Außerdem ist die explizite Angabe einer Strategie überflüssig.
Um den Fluss zu überwinden und die Dinge zu vereinfachen:
%Vor% @instance
ist eine Instanz von Offering
, die zur Zeit von der Factory erstellt wird. Für die Neugierigen ist der Kontext FactoryGirl::Evaluator
.
Wenn Sie @instance
nicht mögen, wie ich es tue, können Sie in evaluator.rb
suchen und folgendes finden:
Ich mag wirklich, wie itself
aussieht:
Kann itself
verwenden, undefiniere es auf Evaluator
:
Es wird an die @instance
übergeben und gibt die @instance
selbst zurück.
Um ein vollständiges Beispiel mit mehreren Fotos zu bieten:
%Vor%Verwendung:
%Vor%Seien Sie vorsichtig, einige Dinge funktionieren möglicherweise nicht wie erwartet:
offering.photos.first.offering_id
wird überraschenderweise nil
; offering.photos.count
trifft die Datenbank mit SELECT COUNT(*) FROM hotel_photos ...
(und wird in den meisten Fällen 0 ergeben), bitte verwenden Sie length
oder size
in Assertions. Tags und Links ruby-on-rails testing factory-bot