我有一个看起来像这样的课程:
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"}>
我做错了什么?无法真正谷歌在这种情况下有用的东西。
答案 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)