FactoryGirl失去了在Model.before_create中内置的belongs_to

时间:2014-05-21 05:09:29

标签: ruby-on-rails activerecord rspec factory-bot before-save

鉴于此模型:

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 }方法就无效。

1 个答案:

答案 0 :(得分:0)

FactoryGirl依靠newsave!来创建模型实例,因此它不会调用您的create方法,因此不会调用您的create挂钩。您必须在模型中重构关联的创建或调整工厂以确保创建关联。