我有一个FactoryGirl如下。 所以我尝试在基本块上创建一些factoryGirl并继承它并依赖于测试它在User类的Observer上存根一个方法。问题是,一旦它存根一个方法,就会保留该类的存根。正如你所看到的那样,我们试图在开始时取消存储所有的存根,但由于并非所有存根都存在,所以我们也不能这样做。 知道如何处理这个问题吗?
FactoryGirl.define do
factory :base_user, class: User do |user|
sequence(:email) {|n| "user#{n}@example.com" }
password 'password'
password_confirmation 'password'
first_name { 'Santa' }
last_name { 'Clause' }
user.after_build do |u|
[:after_create, :create_piick_user, :send_signup_email].each do |method|
begin
UserObserver.any_instance.unstub(method)
rescue RuntimeError
end
end
end
end
factory :user, parent: :base_user do |user|
user.after_build do |u|
UserObserver.any_instance.stub(:after_create).and_return(nil)
end
end
factory :user_with_welcome_email, parent: :base_user do |user|
user.after_build do |u|
UserObserver.any_instance.stub(:create_piick_user).and_return(nil)
end
end
end
答案 0 :(得分:1)
我不会将存根放在定义上。在定义上,您只需设置属性,然后使用
Factory.stub(:user)
稍后,将存根所有属性。