2011-05-14 4 views
4

많은 연관을 가지고, 여기에 내가 무엇을 가지고 :공장 소녀 - 나는 RSpec에와 공장 소녀를 사용하고

factories.rb

Factory.define :user do |f| 
    f.sequence(:fname) { |n| "fname#{n}" } 
    f.sequence(:lname) { |n| "lname#{n}" } 
    f.sequence(:email) { |n| "email#{n}@google.com" } 
    f.password    "password" 
    f.password_confirmation { |u| u.password } 
    f.invitation_code  "xxxxxxx" 
end 

Factory.define :group do |f| 
    f.sequence(:name) { |n| "myGroup#{n}" } 
    f.sequence(:private_email) { |n| "myGroup#{n}" } 
end 

Factory.define :permission do |f| 
    f.role_id   1 
end 

groups_controller_spec.rb

describe GroupsController do 
    include Devise::TestHelpers 

    before (:each) do 
    @user1 = Factory.create(:user) 
    @user1.confirm! 
    sign_in @user1 
    @group = Factory.create(:group) 
    @group2 = Factory.create(:group) 
    @group3 = Factory.create(:group) 
    @permission_user_1 = Factory.create(:permission, :user => @user1, :creator_id => @user1.id, :group => @group) 
    @permission_user_2 = Factory.create(:permission, :user => @user1, :creator_id => @user1.id, :group => @group2) 
    @permission_user_3 = Factory.create(:permission, :user => @user1, :creator_id => @user1.id, :group => @group3) 
    end 

....... 

문제는 그룹 모델에 공장에서 설정하지 않는 user_id 필드가 있다는 것입니다. 어떻게 사용자를 생성 한 다음 공장에서 해당 사용자를 대신하여 그룹을 만들 수 있습니까? @ user1.group.factory.create (: group)와 (과) 비슷합니까?

아이디어가 있으십니까? 감사합니다

답변

15

모든 사용자에 대해 이렇게하지 마십시오. 대신 사용자 팩토리에서 상속 된 다른 팩토리를 만드십시오.

Factory.define :user_with_group, :parent => :user do |u| 
    u.groups { |g| [ g.association(:group), 
        g.association(:group) 
        ]} 
end 

당신은 https://github.com/drhenner/ror_ecommerce/tree/master/spec/factories에있는 링크에 대한

+0

특별 감사를 예를 들어 공장을 많이 볼 수 있습니다 –

관련 문제