Установка защищенных атрибутов с FactoryGirl - PullRequest
8 голосов
/ 18 января 2012

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 ]

10 голосов
/ 18 января 2012

Использование after_create крюка работает:

Factory.define :user do |f|
  f.name "Tim"
  f.after_create do |user|
    user.confirmed = true
    user.save
  end
end 
3 голосов
/ 18 января 2012

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

user ||= Factory(:user, :confirmed => true)
0 голосов
/ 03 июня 2013

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

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

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

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

Некоторые непроверенные предложения, касающиеся Con:

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