0

鉴于此模型:

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自己的方法就行不通。associationUserbefore_create { build_user_profile }

4

1 回答 1

1

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

于 2014-05-21T06:09:02.663 回答