У меня есть серия моделей, для которых я определил фабрики.У меня также есть модель на основе API, подклассы которой ActiveResource::Base
, которую я (очевидно) не могу построить на фабрике - я получаю исключение, когда Factory Girl вызывает FooAPI.new
.
Вместо этого я определил класс Foo
в test/lib
.Что я хотел бы сделать в своем тесте, так это посмотреть, существует ли фабрика для данного символа (например, :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