2013-10-24 85 views
2

我的Rspec測試全部單獨傳遞,但作爲整個套件失敗。Rspec Suite在OmniAuth模擬身份驗證散列上失敗

我已經縮小的問題降到使用模擬omniauth哈希描述spec/support/devise.rb:測試失敗(使用pry),如果在運行套件則返回:invalid_credentials

OmniAuth.config.test_mode = true 

OmniAuth.config.mock_auth[:facebook] = { 
    "uid" => "1111", 
    "provider" => "facebook", 
    "credentials" => { 
    "token" => "token", 
    "secret" => "secret" 
    }, 
    "extra" => { 
    "raw_info" => { 
     "name" => "Adam Waite", 
     "username" => "adamjwaite", 
     "email" => "[email protected]" 
    } 
    } 
} 

OmniAuth.config.add_mock(:facebook, OmniAuth.config.mock_auth[:facebook]) 

當我檢查OmniAuth.config.mock_auth[:facebook]之前。如果我在單個測試文件中運行相同的測試,則會顯示它。

這裏是在註冊方法在我UsersController失敗的測試:

describe "GET :new" do 
    describe "as an unauthenticated user with a facebook omniauth session" do 
    before do 
     session[:omniauth_facebook] = OmniAuth.config.mock_auth[:facebook] 
     get :new 
    end 
    specify { assigns[:registering_with_facebook].should == true } 
    specify { assigns[:registering_with_twitter].should == false } 
    specify { response.should be_success } 
    end 
end 

另外值得一提的是,應用功能正常了。我只希望套房通過。

任何人都會對發生了什麼事發光?

回答

4

每當某個測試獨立運行但未能通過其他測試時,就會遇到測試訂購問題。一些早期的測試正在改變全球狀態,並以這種方式離開,這對測試產生了負面影響。

我創建了一個小工具來幫助我在自己的套件中找到訂購問題:rspec-search-and-destroy。它會把你的測試套件分成兩部分,直到它找到一個設置壞的全局狀態的測試。當然,你可以親自動手做這件事,但希望該工具可以自動執行苦差事。

一旦你找到了先前的測試,那麼你需要檢查它來找出正在設置什麼樣的全局狀態,以及如何正確地將這個改變變成只需要測試的測試。

+1

謝謝。你的寶石讓我陷入了自己的愚蠢之中,在規範失敗之前運行的規範。我已經完成了'OmniAuth.config.mock_auth [:facebook] =:invalid_credentials'來測試失敗,並忘記將其放回到其他規格中使用。咄。謝謝! –