工厂女孩初始化时遇到麻烦

时间:2017-05-24 09:37:53

标签: ruby-on-rails unit-testing factory-bot

我有一个模型,其中在对象实例化期间将多个参数传递给初始化。有没有办法让我可以跳过这个方法在工厂里完全执行。

我的模型文件如下所示:

class WebResponseCache < ActiveRecord::Base
  validates_presence_of :q, :results

  self.table_name = "web_response_cache"

  def initialize(q, results)
    super()
    self.q = q
    self.results = results
  end

我的工厂女孩​​代码如下所示:

FactoryGirl.define do    
  factory :google_web_response_cache, :class => WebResponseCache do
    initialize_with { new('query', 'results') }
  end
end

1 个答案:

答案 0 :(得分:3)

你不能跳过这个方法来执行,因为它是构造函数。但您可以更改它以使参数不必要。

  def initialize(attrs = nil)
    super()
    return unless attrs

    self.q = attrs[:q]
    self.results = attrs[:results]
  end

现在你可以做到

WebResponseCache.new # no params passed
WebResponseCache.new(q: 'query', results: 'results') # will be initialized with given params

现在您的工厂不需要initialize_with阻止。