Установка защищенных атрибутов с 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