Установка защищенных атрибутов с FactoryGirl

FactoryGirl не будет устанавливать мой защищенный атрибут user.confirmed, Какова лучшая практика здесь?

Factory.define :user do |f|
  f.name "Tim"          # attr_accessible -- this works
  f.confirmed true      # attr_protected -- doesn't work
end 

Я могу сделать @user.confirmed = true после использования моей фабрики, но это много повторений во многих тестах.

3 ответа

Решение

Используя after_create крюк работает:

Factory.define :user do |f|
  f.name "Tim"
  f.after_create do |user|
    user.confirmed = true
    user.save
  end
end 

Вам нужно будет передать его в хеш при создании пользователя, поскольку FactoryGirl защищает его от массового назначения.

user ||= Factory(:user, :confirmed => true)

Другой подход заключается в использовании встроенных в Rails ролей, например:

#user.rb
attr_accessor :confirmed, :as => :factory_girl

При массовом назначении FactoryGirl передает эту роль, что делает возможным этот шаблон.

Плюсы: держит фабрики быстро, просто и чисто (меньше кода в обратных вызовах)
Минусы: Вы меняете код модели для своих тестов:(

Несколько непроверенных предложений по решению проблемы:

  • Вы можете открыть класс прямо над вашей фабрикой.
  • Вы можете заново открыть класс в [test|spec]_helper
Другие вопросы по тегам