2011-12-14 4 views
0

У меня есть FactoryGirl как ниже. Итак, я пытаюсь создать несколько из factoryGirl на базовом блоке и наследовать от него и в зависимости от теста. Он заглушает метод на Observer класса User. Проблема заключается в том, что он заглушает метод, который он сохраняет для этого класса. как вы можете видеть, мы попытались разблокировать все заглушки в начале, но так как не все они всегда заглушены, мы тоже не можем этого сделать. Любая идея, как справиться с этой проблемой?Stub FactoryGirl Observer Class

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 

ответ

1

Я бы не поставил заглушку на определение. В определении вы можете просто настроить свойства, затем используйте

Factory.stub(:user) 

Позже, что заглушит все свойства.