FactoryGirl孩子后(:创建)创建父母的时候
回调不跑我有类似如下:FactoryGirl孩子后(:创建)创建父母的时候
# 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 '[email protected]'
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
回调这台积极为假,如果我做FactoryGirl.create(:card)
后(:创建)钩没有按”不要在电子邮件工厂打电话,所以我总是收到不活动的电子邮件。
我相信你的问题是你没有在工厂女孩内部创建电子邮件。 FactoryGirl建立它,所以after(:create)
不会被调用。当父母离开FactoryGirl时,电子邮件会被保存。
我想尝试另一种方法:
factory :card do
after(:create) do |card, evaluator|
create_list(:email, 1, card: card, :active)
end
end
我相信会工作。
我明白你的解释,为什么回调没有执行,但问题是,我在卡模型上至少会查找一封电子邮件的验证器,所以我无法在卡创建后添加电子邮件。 – janosrusiczki
它没有一个简单的解决方案。没有电子邮件就无法创建卡片,并且不能在没有卡片的情况下创建电子邮件,而且您还需要在电子邮件模型中保存后。我不认为你可以绕过FactoryGirl。在我看来,您需要在重置电子邮件的活动字段的规范中编写回调之前。 – boulder
谢谢,我结束了这样做。我浪费了太多时间来追逐我的尾巴。 – janosrusiczki
请显示您的before_save回调。已添加 – boulder
电子邮件模型。 – janosrusiczki