如何使用FactoryGirl创建一个名为“别名”的属性?
问题描述:
我只是想知道是否可以使用FactoryGirl创建一个名为“别名”的属性,因为别名是Ruby中的保留字。如何使用FactoryGirl创建一个名为“别名”的属性?
FactoryGirl.define do
factory :blah do
name "dummy"
alias "dummy"
end
end
我试过各种组合逃逸的东西,但不能得到任何有用的工作。
答
Ruby不知道您是要调用alias
的方法,还是将另一种方法别名,并且默认为后者。你可以通过做消除歧义
self.alias "dummy"
即,通过明确指定接收者。在其他情况下,如果您正在调用方法或执行其他操作
self.foo = 'bar'
调用foo=
方法,而不是创建一个名为foo的一个局部变量。
对于small number of field names这不起作用。工厂女孩的DSL使用method_missing
,因此如果DSL对象具有该名称的方法,它将被调用。在这种情况下,你可以做什么的DSL糖正常为你做,并直接调用add_attribute
:
FactoryGirl.define do
factory :blah do
add_attribute :name, "some value"
end
end
相同
FactoryGirl.define do
factory :blah do
name "some value"
end
end
答
定义就可以了factory .. do
块和调用方法的变量。
FactoryGirl.define do
factory :blah do |f|
f.name "dummy"
f.alias "dummy"
end
end
使用'self.alias'完成了诀窍。尽管我已经尝试过,但我仍然乐观。 ( - :谢谢! – 2012-02-16 21:22:35
只是有这个问题,我的模型有一个名为“end”的属性,'self.end'使它工作。 – GMA 2014-01-08 12:35:19
该死的,这对名为'method'的字段不起作用。 – 2014-12-02 00:55:41