ruby轨道 – 工厂女孩的依赖工厂
我有2个工厂. Beta_user和Beta_invite.基本上在Beta_user可以有效保存之前,我必须创建一个Beta_invite条目.不幸的是,这些模型没有干净的关联,但是它们共享一个电子邮件字段.
Factory.sequence :email do |n| "email#{n}@factory.com" end #BetaInvite Factory.define :beta_invite do |f| f.email {Factory.next(:email)} f.approved false f.source "web" end #User Factory.define :user do |f| f.email {Factory.next(:email)} f.password "password" end #User => BetaUser Factory.define :beta_user,:parent => :user do |f| f.after_build do |user| if BetaInvite.find_by_email(user.email).nil? Factory(:beta_invite,:email => user.email) end end end 所以在beta beta_user工厂,我试图使用after_build回调来创建beta_invite工厂. 然而,它似乎是表现异动或某事.可能要做find_by_email提取? 如果我尝试这样: Factory(:beta_user) Factory(:beta_user) Factory(:beta_user) 我收到一个失败,表示没有用户电子邮件的beta_invite记录. 如果反而我试试: Factory.build(:beta_user).save Factory.build(:beta_user).save Factory.build(:beta_user).save 我得到更好的结果.就像调用.build方法并等待保存一样,允许创建beta_invite工厂的时间.而不是直接调用Factory.create.该文档说在调用Factory.create的情况下,after_build和after_create回调被调用. 任何帮助深表感谢. 更新: 所以我使用的用户模型对该方法进行了before_validation调用,该方法检查是否有beta邀请.如果我将此方法调用转换为before_save.它正常工作.有什么我在看吗factory_girl什么时候运行与active-record的before_validation和before_save相关的after_build和after_create回调? 解决方法
对我而言似乎应该能够工作,但是在工厂女生中也有协会的问题.一种我喜欢在这种情况下使用的方法,如果关系不太明显,就是在工厂内定义一个特殊的方法,如下所示:
def Factory.create_beta_user beta_invite = Factory(:beta_invite) beta_user = Factory(:user,:email => beta_invite.email) beta_user end 并在您的测试中使用,只需写入 Factory.create_beta_user 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |