我有以下工厂:

factory :user do
    name 'Henk'
    email 'foo@bar.co'
    password 'foobar'
    password_confirmation { |u| u.password }
end

factory :photo do |ph|
    user
    ph.subtitle 'abc'
    ph.photo { fixture_file_upload( Rails.root.join( 'spec', 'fixtures', 'files', 'test-file-one.png' ), 'image/png') }
end

factory :ad do |ad|
    user
    name 'Kip'
    reason 'Ik wil gewoon hele mooie nieuwe, om een beetje van te eten.'
    price 69.15
end


照片和广告都属于用户,但是照片也属于广告。这是一个问题,因为每当我测试“照片”和“添加”之间的关系时,用户验证都会正确地抱怨该电子邮件的用户已在使用中。如何告诉rspec重新使用同一用户,而不尝试创建具有相同工厂的另一用户?

最佳答案

确保使用同一父级的最简单方法是在测试期间将父级传递到工厂创建中。例如:

@user = FactoryGirl.create(:user)
@photo = FactoryGirl.create(:photo, user: @user)
@ad = FactoryGirl.create(:ad, user: @user)


这样可以确保photoad都使用相同的user父对象,因此可以避免遇到的验证问题。

关于ruby-on-rails - 如何创建两个对象属于同一父对象的工厂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12604510/

10-16 20:49