哪个是使用FactoryGirl对属性进行别名的正确方法?

时间:2011-08-26 00:37:24

标签: ruby-on-rails testing rspec factory-bot aliasing

好吧,我在factories.rb

中有以下内容
Factory.alias /(.*_)confirmation/, "\1"

Factory.define :user do |f|
  f.new_pass  'asdasdasd'
  f.new_pass_confirmation 'asdasdasd'
end

然后当我创建用户时,我会执行以下操作:

Factory.build(:user, :new_pass => 'something', :new_pass_ => 'something_else')

但它给我一个错误:

undefined method `new_pass_=` for #<User:0x1234567>

FactoryGirl不应该将new_pass_转换为new_pass_confirmation吗?

1 个答案:

答案 0 :(得分:1)

factory_girl中的别名用于防止两个属性相互冲突。典型的例子是关联与外键:如果你的工厂定义了一个“用户”关联,你通过传递“user_id”来覆盖它,那么“user_id”应该优先。

如果您希望密码确认覆盖密码,则使用此别名:

Factory.alias /(.*)_confirmation/, "\1"

听起来您希望密码确认默认为密码,您可以这样做:

Factory.define :user do |f|
  f.new_pass  'asdasdasd'
  f.new_pass_confirmation { |u| u.new_pass }
end

在新语法中,您可以省略块参数:

FactoryGirl.define do
  factory :user do
    new_pass  'asdasdasd'
    new_pass_confirmation { new_pass }
  end
end