2011-12-14 50 views
0

我有一個FactoryGirl作爲波紋管。 因此,我嘗試在base block上創建少數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 

回答

1

我不會把這個存根放在定義上。在定義你可以設置屬性,然後使用

Factory.stub(:user) 

稍後,將存根的所有屬性。