我有一系列我定義工廠的模型。我也有一個基於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
HRM,這似乎並沒有爲我工作。我用'Factory.find:foo'得到'NameError:未初始化的常量FooTest :: FactoryGirl'和一個'NoMethodError:未定義的方法'find'Factory:foo'用於Factory:Class'。我想知道它是否與Rails集成有關? – 2011-03-21 13:36:46
我不認爲它存在於1.3中,我只能看到'Factory.factories [name]'作爲等價物。看起來有點粗糙,可能會在後面的版本中刪除。 – 2011-03-21 14:05:11