如何全局向 FactoryBot 添加函数?



我有一个类,它扩展了FactoryBot,以包含复制Rails.first_or_create的功能。

module FactoryBotFirstOrCreate
def first(type, args)
klass = type.to_s.camelize.constantize
conditions = args.first.is_a?(Symbol) ? args[1] : args[0]
if !conditions.empty? && conditions.is_a?(Hash)
klass.where(conditions).first
end
end
def first_or_create(type, *args)
first(type, args) || create(type, *args)
end
def first_or_build(type, *args)
first(type, args) || build(type, *args)
end
end

我可以将其添加到SyntaxRunner类中

module FactoryBot
class SyntaxRunner
include FactoryBotFirstOrCreate
end
end

在工厂中访问它

# ...
after(:create) do |thing, evaluator|
first_or_create(:other_thing, thing: thing)
end

但是当我尝试在工厂外使用它时,我无法访问它......

  • FactoryBot::SyntaxRunner.first_or_createFactoryBot.first_or_create无济于事
  • 在FactoryBot模块中include它无济于事
  • config.includeRSpec.configure无济于事
  • 我什至无法直接访问它FactoryBot::SyntaxHelper.first_or_create

有了所有这些步骤,我仍然会得到NoMethodError: undefined method first_or_create

我可以包含或以其他方式配置什么,以使我像FactoryGirl的create一样可以访问此方法?

根据@engineersmnky,extending FactoryBot 工作

module FactoryBot
extend FactoryBotFirstOrCreate
end

那么这行得通

my_foo = first_or_create(:everything, is: :awesome, if_we: :work_together)

相关内容

  • 没有找到相关文章

最新更新