我有一系列模型,并为其定义了工厂。我还有一个基于 API 的模型,它是 ActiveResource::Base
的子类,我(显然)不能从工厂构建它——当 Factory Girl 时我得到一个异常调用 FooAPI.new
。
我在 test/lib
中定义了一个 Foo
类。我想在测试中做的是查看给定符号的工厂是否存在(例如 :foo
、:bar
等),然后回退到尝试使用 String#classify.constantize
直接构造适当类的对象。这是我目前笨拙的实现:
objects[name] = begin
klass = name.to_s.classify.constantize
klass.new
rescue
Factory.build name
end
我更喜欢这样的东西:
Factory.exists?(name) ? Factory.build(name) : name.to_s.classify.constantize.new
那样的话,我会在构建对象失败时得到一个适当的异常。
更新:感谢fd ,我找到了一种无需异常处理的方法!
objects[name] = if Factory.factories.include?(name)
Factory.build name
else
klass = name.to_s.classify.constantize
klass.new
end
最佳答案
在更高版本的 FactoryBot 中起作用的是
FactoryBot.factories.registered?(name)
https://stackoverflow.com/questions/5377515/