我有以下内容:
# spec/factories/card.rb
FactoryGirl.define do
factory :card do |f|
first_name 'First Name'
[...]
emails { [ build(:email, :active) ] }
end
end
我正在使用build
发送电子邮件,因此我不会收到电子邮件belongs_to :card
的错误。
# spec/factories/email.rb
FactoryGirl.define do
factory :email do |f|
address 'test@test.com'
end
trait :active do
after(:create) do |email|
email.active = true
email.save
end
end
end
我的电子邮件型号:
# app/models/email.rb
class Email < ActiveRecord::Base
belongs_to :card
before_save :set_confirm_key
def set_confirm_key
if address_changed?
self.confirm_key = SecureRandom.urlsafe_base64(15)
self.active = false
return
end
end
end
问题是我的电子邮件模型上有before_save
回调,它将active设置为false,如果我FactoryGirl.create(:card)
,则不会在电子邮件工厂中调用after(:create)挂钩所以我总是收到不活跃的电子邮件。
答案 0 :(得分:1)
我相信你的问题是你没有在工厂女孩中创建电子邮件。 FactoryGirl构建它,因此after(:create)
不会被调用。当父母离开FactoryGirl时,电子邮件会被保存。
我会尝试另一种方法:
factory :card do
after(:create) do |card, evaluator|
create_list(:email, 1, card: card, :active)
end
end
我相信这会奏效。