2014-05-17 10 views
6

Próbuję zrobić coś, co moim zdaniem powinno być dość proste w przypadku Factory Girl i nie mogę tego w pełni zrozumieć. Użytkownik ma wiele historii i testuję przeglądanie strony profilu użytkownika, która zawiera listę utworzonych historii.Factory Girl: Tworzenie powiązanych rekordów

Spojrzałem w górę tworząc powiązanych fabryk i docs powiedzieć mogę zrobić coś takiego:

FactoryGirl.define do 

    factory :story do 
    title "My Story" 
    segments_limit 5 
    beginning "Once upon a time" 
    completion_status false 
    user 
    end 

    factory :user do 
    sequence(:username) { |n| "user-#{n}" } 
    sequence(:email) { |n| "user-#{n}@example.com" } 
    password "password" 
    password_confirmation "password" 

    factory :user_with_stories do 
     ignore do 
     stories_count 5 
     end 

     after(:create) do |user, evaluator| 
     create_list(:story, evaluator.stories_count, user: user) 
     end 
    end 
    end 
end 

to nie wydaje się działać, choć - kiedy się do konsoli i uruchomić FactoryGirl.create(:user_with_stories).stories.length, otrzymuję pusta tablica. Czy czegoś brakuje?

Odpowiedz

4

należy użyć after :build i build_list i przypisać listę do stowarzyszenia użytkownika, tak jak poniżej:

after(:build) do |user, evaluator| 
    user.stories << build_list(:story, evaluator.stories_count, user: user) 
end 
1

Historie są dodawane po utworzeniu użytkownika, trzeba instancję użytkownika po tworzenie zobaczyć historie załączone:

user = FactoryGirl.create(:user_with_stories) 
user = User.find user 
user.stories.length 
Powiązane problemy