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

问题描述 投票:0回答:1

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

ruby-on-rails rspec factory-bot
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.