如果某家工厂存在,我可以问工厂女孩吗?

Jos*_*ver 1 ruby-on-rails factory-bot

我有一系列模型,我已经定义了工厂.我还有一个基于API的模型,它的子类ActiveResource::Base,我(显然)不能从工厂构建 - 当Factory Girl调用时我得到一个例外FooAPI.new.

我改为定义了一个Footest/lib.我想在我的测试做的是看是否存在某个符号(如工厂:foo,:bar等等),然后回落到试图直接建立相应的类的对象,使用String#classify.constantize.这是我目前笨重的实现:

  objects[name] = begin
    klass = name.to_s.classify.constantize
    klass.new
  rescue
    Factory.build name
  end
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样的东西:

Factory.exists?(name) ? Factory.build(name) : name.to_s.classify.constantize.new
Run Code Online (Sandbox Code Playgroud)

这样,我就会在构造对象失败时得到一个适当的例外.

更新:感谢fd,我找到了一种方法来做到这一点,无需异常处理!

  objects[name] = if Factory.factories.include?(name)
    Factory.build name
  else
    klass = name.to_s.classify.constantize
    klass.new
  end
Run Code Online (Sandbox Code Playgroud)

Dan*_*nny 9

在FactoryGirl的更高版本中有效的是

FactoryBot.factories.registered?(name)
Run Code Online (Sandbox Code Playgroud)