ruby-on-rails - 访问* other *工厂中的factory_girl工厂

标签 ruby-on-rails tdd factory factory-bot

我在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/

相关文章:

python - 如何创建一个简单的元类?

ruby-on-rails - 如何在 Rails 模型中运行 "do" block ,同时仍列出 :dependent?

ruby-on-rails - ruby 调试 "no such file to load --spec_helper"

unit-testing - 早期写测试真的合理吗?

tdd - 我是否应该在尚未使用 TDD 的项目上开始使用它

c# - 工厂模式在工厂类中实例化类

ruby-on-rails - Rails 遍历深度哈希数组

ruby-on-rails - FactoryGirl 工厂具有返回带有字符串键的哈希的特征

c# - UnitOfWork 模式是否会在 EF 应用程序中增加值(value)?

c++ - 是否使用 std::move 转储成员可接受的设计?