Ruby on rails FactoryGirl丢失属于内置模型。在创建之前
鉴于这种模式:Ruby on rails FactoryGirl丢失属于内置模型。在创建之前,ruby-on-rails,activerecord,rspec,factory-bot,before-save,Ruby On Rails,Activerecord,Rspec,Factory Bot,Before Save,鉴于这种模式: class User < ActiveRecord::Base belongs_to :user_profile before_create { build_user_profile } end 当我这样做时: @user = FactoryGirl.create(:user) FactoryGirl失去了@user.user\u profile关联(它是nil),我必须调用@user.reload 这在一定程度上减慢了我的测试速度,因为大多数测试都需要登录
class User < ActiveRecord::Base
belongs_to :user_profile
before_create { build_user_profile }
end
当我这样做时:
@user = FactoryGirl.create(:user)
FactoryGirl
失去了@user.user\u profile
关联(它是nil
),我必须调用@user.reload
这在一定程度上减慢了我的测试速度,因为大多数测试都需要登录用户。我已尝试让工厂(重新)在(:build/:create)之前/之后的中创建关联,但没有成功
如何让FactoryGirl在挂钩前后尊重ActiveRecord
编辑:
重新加载
实际上是不够的,我必须这样做:
FactoryGirl.define do
factory :user do
after(:create) do |user|
user.create_user_profile
user.save
end
end
end
只要用户
模型在创建{build\u User\u profile}
之前有,依赖于新建
和保存,使用FactoryGirl
自己的关联
方法就不起作用
创建模型实例,因此它不会调用create
方法,因此也不会调用create
钩子。您必须重构模型中关联的创建或调整工厂,以确保关联的创建。FactoryGirls关联方法应该可以工作,您能解释一下使用关联方法的问题吗?我无法解释。我想不出来。如果我在创建之前从模型中删除,FactoryGirl的关联方法将按预期工作。使用中的before\u create
,User
s由FactoryGirl
创建,无论我是否添加FactoryGirl关联方法,都不会获得User\u profile
。create\u User\u profile
将在用户
无效时导致孤立记录,在实际的应用程序中,或者如果我编写了一个不使用FactoryGirl的规范,那么一切都会按照预期工作。
FactoryGirl.define do
factory :user do
after(:create) do |user|
user.create_user_profile
user.save
end
end
end