鉴于此模型:
class User < ActiveRecord::Base
belongs_to :user_profile
before_create { build_user_profile }
end
和这家工厂:
FactoryGirl.define do
factory :user do
end
end
当我这样做时:
@user = FactoryGirl.create(:user)
FactoryGirl
丢失@user.user_profile
关联(nil
),我必须致电@user.reload
这会稍微减慢我的测试速度,因为大多数测试都需要登录用户。我已经尝试让工厂(重新)在before/after(:build/:create)
中创建关联无效。
如何在挂钩之前/之后让FactoryGirl
尊重ActiveRecord
?
reload
实际上还不够,我必须这样做:
FactoryGirl.define do
factory :user do
after(:create) do |user|
user.create_user_profile
user.save
end
end
end
只要FactoryGirl
模型具有association
,使用User
自己的before_create { build_user_profile }
方法就无效。
答案 0 :(得分:0)
FactoryGirl
依靠new
和save!
来创建模型实例,因此它不会调用您的create
方法,因此不会调用您的create
挂钩。您必须在模型中重构关联的创建或调整工厂以确保创建关联。