我有一个类,它扩展了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_create
或FactoryBot.first_or_create
无济于事- 在FactoryBot模块中
include
它无济于事 config.include
RSpec.configure
无济于事- 我什至无法直接访问它
FactoryBot::SyntaxHelper.first_or_create
有了所有这些步骤,我仍然会得到NoMethodError: undefined method first_or_create
我可以包含或以其他方式配置什么,以使我像FactoryGirl的create
一样可以访问此方法?
根据@engineersmnky,extend
ing FactoryBot 工作
module FactoryBot
extend FactoryBotFirstOrCreate
end
那么这行得通
my_foo = first_or_create(:everything, is: :awesome, if_we: :work_together)