我有一个用户模型has_one个人资料。我创建用户时会自动创建配置文件;
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
after_create :create_profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
这一切都很好用,每个用户都会创建一个默认配置文件。
我想对我的用户模型进行一些测试,这是我正在努力的地方。
我正在使用FactoryGirl并希望像这样创建一个用户
FactoryGirl.define do
factory :user do
sequence(:email) {|n| "user_#{n}@example.com"}
sequence(:username) {|n| "user_#{n}"}
password "secret"
factory :activated_user do
before(:create) {|user| user.activated = true}
association :profile, factory: :profile_for_activated_user
end
end
end
FactoryGirl.define do
factory :profile do
factory :profile_for_activated_user do
first_name "Johnny"
last_name "User"
end
end
end
这是我遇到问题的地方。 after_create回调(我想要的)会覆盖FactoryGirl创建的关联(在FactoryGirl.create :activated_user
上),所以我最终得到一个空白的配置文件和失败的测试。我是否需要更改模型中创建关联的方式(我不应该这样做 - 我不应该修改我的代码以适应我的测试工具)或者有没有办法在FactoryGirl中管理它?我是否应该在FactoryGirl中创建用户后在我的测试中手动分配配置文件属性?
答案 0 :(得分:2)
您可以跳过after_create回调,如下所示:
FactoryGirl.define do
factory :user do
after(:build) { |user| user.class.skip_callback(:create, :after, :create_setting) }
end
end