2011-12-14 6 views
0

나는 FactoryGirl을 가지고있다. 그래서 기본 블록에 factoryGirl을 거의 만들지 않으려 고 테스트의 결과에 따라 상속합니다. Observer에서 User 클래스의 메서드를 스텁합니다. 문제는 메소드를 스텁 한 후에 클래스에 스텁을 유지하는 것입니다. 당신이 볼 수 있듯이 우리는 처음에 모든 스터브를 떼어 놓으려고했으나 모든 스텁이 항상 스텁되지 않았기 때문에 우리는 그렇게 할 수 없습니다. 이 문제를 어떻게 해결할 수 있습니까?스텁 FactoryGirl 옵저버 클래스

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) 

나중에 모든 속성이 스텁됩니다.