2010-02-10 16 views
19

Raylarım uygulamasında factory_girl eklentisini kullanıyorum. Her model için, fabrika verilerini içeren ilgili bir ruby ​​dosyasına sahibim.* Diğer * fabrikalardaki factory_girl fabrikalarına erişme

Factory.define :valid_thing, :class => Thing do |t| 
    t.name 'Some valid thing' 
    # t.user ??? 
end 

Çok sayıda farklı kullanıcı türüm var (zaten kullanıcı fabrikasında tanımlı). Gerçi şunları deneyin:

Factory.define :valid_thing, :class => Thing do |t| 
    t.name 'Some valid thing' 
    t.user Factory(:valid_user) # Fails 
end 

aşağıdaki hatayı alıyorum:

# No such factory: valid_user (ArgumentError) 

: valid_user olsa aslında geçerlidir - Benim testlerde kullanabilirsiniz - sadece benim fabrikalarda. Burada başka bir dosyada tanımlanmış bir fabrikayı kullanmanın bir yolu var mı? Bu kodu kullanmalısınız

Factory.define :valid_thing, :class => Thing do |t| 
    t.name 'Some valid thing' 
    t.association :valid_user 
end 

cevap

4

gibi dernek yöntemini kullanmayı deneyin

Factory.define :valid_thing, :class => Thing do |t| 
    t.name 'Some valid thing' 
    t.user { Factory(:valid_user) } 
end 

} {aramayı tamamlayan kadar parantezleri içindeki kod değerlendirmek değil Fabrika Kız neden olur : geçerli bir fabrika oluşturuldu. Bu, geçerli_user fabrika yüklenene kadar beklemeyi zorlayacaktır (Örneğiniz henüz yüklenmediğinden başarısız oluyor), aynı zamanda her biri için de geçerli olacak yeni bir: valid_user: geçerli kullanıcı için aynı kullanıcıya sahip olmak yerine : valid_thing's (Muhtemelen istediğinizi).

+0

Ayrıca şunları yapabilirsiniz: t.association: kullanıcı, fabrika:: valid_user' – Kris

29

:

+10

Bu iyi çalışıyor. Sadece Fabrika (: valid_user) sözdiziminin kullanımdan kaldırıldığını biliyorum; Bunun yerine 'FactoryGirl.create (: valid_user)' kullanın. –

+0

'create (: valid_user)' i kullanarak oluşturmaya çalıştığımda (: valid_thing) aslında bir oluşturma yapacak, değil mi? Bu referansın, çağrılana bağlı olarak oluşturulmasını/oluşturulmasını sağlamak için bir yolu var mı? – mpgarate

+0

@mpgarate - Hayır, yapı –

3

Potansiyel olarak, Factory Girl ürününün soruna göre yargılayarak yeni bir özellik olduğunu, ancak Factory'deki öznitelik adının fabrika adıyla aynı olması durumunda, yalnızca fabrikanızda özniteliğin adını çağıracaksınız. ilgili Fabrika nesli ile doldurun.

FactoryGirl.define do 
    factory :thing do 
    user 
    end 
end 

Bu aynı adı taşıyan bir fabrikada arayan ve bu onu doldurma kullanıcı alanında yol açmalıdır.

+0

Bu benim için çalıştı –