Rails 使用 FactoryGirl 测试非 AR 模型(class)

Rails testing non-AR model(class) with FactoryGirl

我有一个 class 看起来像这样:

class Killmail::Parser
  def initialize(body)
    @body = body
  end
end

我也有一个工厂:

FactoryGirl.define do
  factory :parser, class: Killmail::Parser do
    skip_create

    body '2013.12.02 19:24 bla bla'

    initialize_with { new(attributes) }
  end
end

只要我不尝试更改默认属性,一切都很好。但是当我尝试像这样使用它时

FactoryGirl.create(:parser, body: 'some different body')

它returns这个:

=> #<Killmail::Parser:0x007fb2ff116548 @body={:body=>"some different body"}>

我做错了什么?在这种情况下真的 google 没有任何用处。

这会起作用,尽管有点麻烦:

改变

initialize_with { new(attributes) }

initialize_with { new(attributes[:body]) }

我不认为工厂女工是为这类事情设计的TBH

您是否尝试过调用 new(body) 而不是 new(attributes)?问题可能在于您如何初始化解析器 class.

attributes 创建所有属性的散列并传递给...

initialize_with { new(attributes) }
# roughly translates to
Parser.new({ body: '2013.12.02 19:24 bla bla' })

在仅使用 body 调用 #new 时仅将该值作为第一个参数传递...

initialize_with { new(body) }
# roughly translates to
Parser.new('2013.12.02 19:24 bla bla')

您可以用同样的方式向 #new 添加任意数量的值...

# in your FactoryGirl.define
new_var_1 'new_string_1'
new_var_2 2

initialize_with { new(body, new_var_1, new_var_2) }
# roughly translates to
Parser.new('2013.12.02 19:24 bla bla', 'new_string_1', 2)