Какой правильный метод для наложения атрибутов с FactoryGirl? - PullRequest
1 голос
/ 26 августа 2011

Ну, у меня есть на фабриках следующее.

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 Ответ

1 голос
/ 04 мая 2012

Псевдонимы в 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
...