如何覆盖类初始化方法并使用FactoryBot?

时间:2018-01-10 11:14:33

标签: ruby-on-rails rspec factory-bot

我在轨道上使用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方法,它确实有效。

1 个答案:

答案 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