2012-04-27 4 views
6

W najnowszym wydaniu FactoryGirl niektóre metody składniowe, takie jak Factory.create, zostały amortyzowane na rzecz kilku innych, w szczególności FactoryGirl.create i prostszego create.Niejasne, kiedy użyć konkretnej składni FactoryGirl

Jednak doświadczenie pokazuje, że niektóre składnie nie zawsze są odpowiednie, biorąc pod uwagę kontekst.

Weźmy na przykład:

FactoryGirl.define do 

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

    factory :comment do 
    end 

end 

Gdzie Komentarze Artykuł has_many i Komentarze belongs_to art. W powyższych fabrykach, a.comments << create(:comment) wydaje błąd Comment(#nnn) expected, got FactoryGirl::Declaration::Static. Zmień tę linię na a.comments << FactoryGirl.create(:comment), a błąd zniknie.

Nie jest jasne, kiedy jedna składnia ma pierwszeństwo przed jakąkolwiek inną formą.

Odpowiedz

5

Nauczyłem się, że skrócona notacja nie jest obsługiwana w wywołaniach zwrotnych (takich jak after_create) od aktualnej wersji (3.2.0). Informacje te pochodziły bezpośrednio od zespołów FactoryGirl za pośrednictwem grup Google. Zaktualizuję to pytanie, gdy/jeśli zostanie dodane w przyszłej wersji.

+1

Jesteś kolesiem z dreszczykiem życia. Po prostu użyję długiej składni. Lepsze dodatkowe naciśnięcia klawiszy niż godziny bezbłędnego debugowania. –

+0

Zapytałem o to rok temu i od tego czasu używamy długiej formy. Tak, zgadzam się, o wiele mniej drapania głowy. – IAmNaN

1

Jak na FactoryGirl documentation, jeśli chcesz pominąć prefiksu modułu FactoryGirl podczas wywoływania metod takich jak tworzyć i budować, trzeba mieszać w metodach FactoryGirl w module rspec/test-unit tak:

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

Dzięki za odpowiedź Salil. Tak, zrobiłem to, co pozwala mi używać 'create' tylko w sytuacjach opisanych powyżej. – IAmNaN