Ruby on rails Rails使用FactoryGirl测试非AR模型(类)

Ruby on rails Rails使用FactoryGirl测试非AR模型(类),ruby-on-rails,ruby,factory-bot,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(attribu

我有一个类似这样的类:

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"}>

我做错了什么?在这个案子上,我真的不能用谷歌搜索任何有用的东西。

这会有用的,尽管有点麻烦:

改变

initialize_with { new(attributes) }

我不认为工厂女孩是为这类事情而设计的,你试过给新人打电话而不是给新人打电话吗?问题可能在于如何初始化解析器类

属性创建所有属性的散列,并传递

initialize_with { new(attributes) }
# roughly translates to
Parser.new({ body: '2013.12.02 19:24 bla bla' })
在使用just body调用new时,仅将该值作为第一个参数传递

initialize_with { new(body) }
# roughly translates to
Parser.new('2013.12.02 19:24 bla bla')
而且你可以以同样的方式向新添加任意多的值

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

好吧,这很有帮助,但是如果我添加更多属性,它将不起作用谢谢,我想我应该这样做!答案“newattributes[:body]”很接近,但现在我知道我可以“新手,还有所有的东西”,是的!在答案中添加了这一点,您可以像对待实际的类初始值设定项一样对待new,attributes只是一个FactoryGirl帮助器方法,用于获取定义中设置的所有值的散列。
# 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)