ruby-on-rails - 如果给定的工厂存在,我可以问 Factory Girl 吗?

我有一系列模型,并为其定义了工厂。我还有一个基于 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/

相关文章:

ruby - 为什么 '\n' 不起作用,$/是什么意思?

java - 如何根据元素的一个字段的值对java中的链表进行排序?

perl - 为 LWP::UserAgent 设置参数时出现问题

django - 如果为空,请提供默认个人资料图片

php - 加入 str_replace 与 strtolower

php - xdebug 安装不工作

php - 检查字符串是否为哈希

f# - 将字典键添加到 F# 中的构造函数

reporting-services - SSRS - 有没有办法将日期/时间输入参数限制为仅限日期

sql - 是什么导致了这种奇怪的 SQL 行为?