How to use FactoryGirl to create an attribute called “alias”?

心已入冬 提交于 2019-12-04 15:40:26

问题


I'm just wondering whether it's possible to create an attribute called "alias" using FactoryGirl, since alias is a reserved word in Ruby.

FactoryGirl.define do
  factory :blah do
    name "dummy"
    alias "dummy"
  end
end

I've tried various combinations of escaping things but can't get anything useful to work.


回答1:


Ruby doesn't know whether you're trying to call a method called alias or alias one method as another, and defaults to the latter. You can disambiguate by doing

self.alias "dummy"

ie, by explicitly specifying the receiver. This is usually the way to go in other cases where it is ambiguous whether you are calling a method or doing something else e.g.

self.foo = 'bar'

to call the foo= method rather than create a local variable called foo.

For a small number of field names this won't work. Factory girl's DSL uses method_missing so if the DSL object has a method of that name it will be called instead. In those cases you can do what the DSL sugar normal does for you and call add_attribute directly:

FactoryGirl.define do
  factory :blah do
    add_attribute :name, "some value"
  end
end

is the same as

FactoryGirl.define do
  factory :blah do
    name "some value"
  end
end



回答2:


Define a variable for the factory .. do block and call methods on it.

FactoryGirl.define do
  factory :blah do |f|
    f.name "dummy"
    f.alias "dummy"
  end
end


来源:https://stackoverflow.com/questions/9309891/how-to-use-factorygirl-to-create-an-attribute-called-alias

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!