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)
我有一个 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)