我在轨道上使用FactoryBot和Rspec。
我有一个 SpecificKeyword ruby类,我扩展了inittialize
方法:
def initialize(args)
super(args)
# Init regexp field immediatly when creating keyword
self.regexp = make_regexp(args[:specificity])
end
在我的Rspec测试中,我试着称之为:
@kw_ex = create(:specific_keyword, name: 'Test Keyword')
。
但我得到了这个堆栈跟踪:
ArgumentError:
wrong number of arguments (0 for 1)
# ./app/models/specific_keyword.rb:19:in `initialize'
看起来在使用FactoryBot实例化SpecificKeyword时,没有args传递给init方法。这是一个理想的行为,如果是这样,我该如何继续使用FactoryBot进行测试?当我执行SpecificKeyword.new(name:'Test')
时,它确实有用。
如果我不覆盖initialize
方法,它确实有效。
答案 0 :(得分:1)
FactoryBot
支持自定义初始化程序,就像您的情况一样:
FactoryBot.define do
factory :specific_keyword do
transient do
name { 'some default' }
end
initialize_with { new(attributes.merge(name: name)) }
end
end
https://robots.thoughtbot.com/factory-girl-2-5-gets-custom-constructors