FactoryGirl工厂用于命名空间类

时间:2015-01-29 19:48:35

标签: ruby-on-rails ruby rspec factory-bot

任何证明或反驳我的想法的文件链接都将非常感激;我似乎找不到任何东西。

AFAIK,如果你有一个带有Product模型的Rails应用程序,你可以将FactoryGirl工厂定义为

FactoryGirl.define do
  factory :product do
    # stuffs
  end
end

然后使用(RSpec示例)

在测试中调用您的工厂
let(:product) { FactoryGirl.create(:product) }

但您可以

调用它
let(:product) { FactoryGirl.create(Product) }

如果您希望保持模型测试更加动态,并且可以使用RSpec的described_class帮助程序自由更改,这将非常有用。

我的问题:

我有一个恰好是命名空间的模型

class Namespace::MyModel < ActiveRecord::Base
  # model stuffs
end

带工厂

FactoryGirl.define do
  factory :my_model, class: Namespace::MyModel do
    # factory stuffs
  end
end

并且在尝试使用RSpec的助手时......

RSpec.describe Namespace::MyModel do
  let(:my_object) { FactoryGirl.create(described_class) }
  # testing stuffs
end

FactoryGirl抱怨工厂缺失

Factory not registered: Namespace::MyModel

我是否错过了FactoryGirl的这个功能,却没有理解它的真正目的?或者是否有另一种方法可以定义我的工厂以正确解析?

1 个答案:

答案 0 :(得分:1)

你为什么不试试

RSpec.describe Namespace::MyModel do
  let(:my_object) { FactoryGirl.create(:my_factory) }
  # testing stuffs
end

FactoryGirl通常由工厂名称使用,但不是类名,即定义。

您可以拥有多个工厂,用于定义同一个类的实例。例如,它们之间的差异可以是字段值。

或者您可以从describe_class名称动态获取工厂名称。 已在How do you find the namespace/module name programmatically in Ruby on Rails?

处回答