2012-04-27 5 views
6

In der neuesten Version von FactoryGirl wurden einige syntaktische Methoden wie Factory.create zugunsten mehrerer anderer, insbesondere FactoryGirl.create und der einfacheren create, abgeschrieben.Unklar, wann eine bestimmte FactoryGirl-Syntax verwendet werden sollte

Die Erfahrung zeigt jedoch, dass bestimmte Syntaxen im Kontext nicht immer angemessen sind.

Nehmen Sie zum Beispiel:

FactoryGirl.define do 

    factory :article do 
    after_create {|a| a.comments << create(:comment) } 
    end 

    factory :comment do 
    end 

end 

Wo Artikel has_many Kommentare und Kommentare belongs_to Artikel. In den obigen Fabriken gibt a.comments << create(:comment) den Fehler Comment(#nnn) expected, got FactoryGirl::Declaration::Static aus. Ändern Sie diese Zeile in a.comments << FactoryGirl.create(:comment) und der Fehler verschwindet.

Es ist nicht klar, wann eine Syntax Vorrang vor einem anderen Formular haben sollte.

Antwort

5

Ich habe gelernt, dass die Abkürzung nicht in Callbacks (wie after_create) ab der aktuellen Version (3.2.0) unterstützt wird. Diese Informationen stammen direkt von den FactoryGirl-Teams über Google-Gruppen. Ich werde diese Frage aktualisieren, wenn sie in einer zukünftigen Version hinzugefügt wird.

+1

Du bist ein friger Lebensretter-Typ. Ich werde nur die lange Syntax verwenden. Bessere zusätzliche Tastenanschläge als stundenlanges Debugging. –

+0

Ich habe das vor einem Jahr gefragt und benutze seitdem die Long-Form. Ja, ich stimme zu, viel weniger Kopf kratzen. – IAmNaN

1

Gemäß der FactoryGirl documentation, wenn Sie das factory Modulpräfix weglassen wollen, während Methoden aufrufen gerne erstellen und bauen, müssen Sie diese mischen-in factory Methoden in rspec/Test-Einheit Modul wie:

# rspec 
RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end 
+0

Danke für die Antwort Salil. Ja, ich habe das getan, was mir ermöglicht, 'create' nur in den oben beschriebenen Situationen zu verwenden. – IAmNaN

Verwandte Themen