任何证明或反驳我的想法的文件链接都将非常感激;我似乎找不到任何东西。
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的这个功能,却没有理解它的真正目的?或者是否有另一种方法可以定义我的工厂以正确解析?
答案 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?
处回答