我在Rails应用程序中使用factory_girl插件。对于每种型号,我都有一个对应的 ruby 文件,其中包含工厂数据,例如
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
# t.user ???
end
我有很多不同类型的用户(已经在用户工厂中定义了)。如果我尝试以下方法:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user Factory(:valid_user) # Fails
end
我收到以下错误:
# No such factory: valid_user (ArgumentError)
:valid_user实际上是有效的-我可以在测试中使用它-而不是在工厂中使用。有什么办法可以使用此处另一个文件中定义的工厂?
最佳答案
您应该使用以下代码:
Factory.define :valid_thing, :class => Thing do |t|
t.name 'Some valid thing'
t.user { Factory(:valid_user) }
end
在{}中包装调用会导致Factory Girl在创建:valid_thing工厂之前不评估括号内的代码。这将迫使它等待直到:valid_user工厂被加载(您的示例失败,因为尚未加载),这还将导致为每个:valid_thing创建一个新的:valid_user,而不是为所有用户创建相同的用户:valid_thing(可能是您想要的)。
关于ruby-on-rails - 访问* other *工厂中的factory_girl工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233671/