Mic*_*lle 20 tdd factory ruby-on-rails factory-bot
我在rails应用程序中使用factory_girl插件.对于每个模型,我有一个包含工厂数据的相应ruby文件,例如
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
# t.user ???
end
Run Code Online (Sandbox Code Playgroud)
我有很多不同类型的用户(已在用户工厂中定义).如果我尝试以下方法:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user Factory(:valid_user) # Fails
end
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
# No such factory: valid_user (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
:valid_user实际上是有效的 - 我可以在我的测试中使用它 - 只是不在我的工厂中.有什么方法可以在这里使用另一个文件中定义的工厂吗?
Gde*_*lin 31
您应该使用此代码:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user { Factory(:valid_user) }
end
Run Code Online (Sandbox Code Playgroud)
在{}中包含调用会导致Factory Girl在创建:valid_thing工厂之前不评估大括号内的代码.这将强制它等到:valid_user工厂已加载(您的示例因为尚未加载而失败),它还将导致为每个创建一个新的:valid_user:valid_thing而不是为所有人创建相同的用户:valid_thing(可能是你想要的).
尝试使用关联方法,例如:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.association :valid_user
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6319 次 |
| 最近记录: |