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)