我有一个属于用户的活动记录模型:
class Profile < ActiveRecord::Base
belongs_to :user
...
end
在我的模型测试中,我有一个before_all块:
before :all do
@profile = build(:user)
end
每个测试用例通过访问器方法获取配置文件类的干净副本,该方法深入克隆该对象:
def profile
@profile.dup
end
美好而快速,而不是每次都打电话给工厂:)
但是我的问题是因为配置文件及其关联在内存中,配置文件中不存在user_id,因此内存用户对象也不会被复制。
所以虽然@profile.user
是一个对象:
<User id: nil, email 'test@test.com '.../>
@profile.dup.user
是
nil
如果我在哪里拨打@profile.save
,那就神奇地
@profile.dup.user
变为:
<User id: 1, email 'test@test.com '...>
如果没有覆盖我的私有方法以明确地将用户复制到克隆上,那么就有办法让rails进行提升。即使dup
方法的行为与保留@profile
时的行为相同吗?
感谢您的任何建议。