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

时间:2015-05-14 13:01:51

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

我有一个看起来像这样的课程:

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')

它返回:

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

我做错了什么?无法真正谷歌在这种情况下有用的东西。

2 个答案:

答案 0 :(得分:0)

这会有效,虽然它有点繁琐:

更改

initialize_with { new(attributes) }

initialize_with { new(attributes[:body]) }

我认为工厂女孩不是为这种事而设计的TBH

答案 1 :(得分:0)

您是否尝试过调用new(body)而不是new(attributes)?问题可能在于您如何初始化Parser类。

attributes创建所有属性的哈希并传递...

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

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

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)