8

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

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

я могу сделать @user.confirmed = true после использования моего завода, но это много повторов через много испытаний.

ответ

10

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

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

Отличная находка. Более поздние версии заводской девушки изменили синтаксис на 'after (: create)'. См. [Начало работы] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) –

3

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

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

спасибо - попробовал это, хотя и не работал – brittohalloran

+2

Работает для меня на FactoryGirl 2.1.0. – iwasrobbed

+0

Я использую 2.3.2, так что может быть, но кажется маловероятным – brittohalloran

0

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

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

При массовом назначении передач FactoryGirl этой роли, что делает этот рисунок возможно.

Pros: Держит фабрики быстрая, простая и чистая (меньше коды в функции обратного вызова)
Минусов: Вы меняете код модели для испытаний :(

Некоторых непроверенных предложений по решению Con .:

  • Вы можете повторно открыть класс чуть выше завода
  • Вы можете повторно открыть класс в [тест | спецификации] _helper
Смежные вопросы