2012-09-22 4 views
7

जब कोई उपयोगकर्ता /auth/facebook पर जाता है, तो यह सफल होने पर मेरे /auth/facebook/callback पर वापस एफबी पर रीडायरेक्ट हो जाता है।लॉगिन के लिए मैं Omniauth RSpec कैसे लिख सकता हूं?

मैं एक आरएसपीईसी परीक्षण कैसे लिख सकता हूं जो मेरे सभी उपयोगकर्ता को प्रमाणित करने के लिए इन सभी रीडायरेक्ट का पालन करेगा?

उत्तर

6

मैं एक वैकल्पिक, सरल दृष्टिकोण की अनुशंसा करता हूं। क्या होगा यदि आपने यह देखने के लिए सीधे कॉलबैक नियंत्रक का परीक्षण किया कि यह omniauth.auth में पारित विभिन्न मानों पर कैसे प्रतिक्रिया करता है या यदि env ["omniauth.auth"] गुम या गलत है। निम्नलिखित रीडायरेक्ट omniauth प्लगइन का परीक्षण करने के बराबर होंगे, जो आपके सिस्टम का परीक्षण नहीं करता है।

उदाहरण के लिए, हमारे पास हमारे परीक्षणों में यह है (यह केवल कुछ उदाहरण हैं, हमारे पास साइन-इन प्रयास से पहले omniauth हैश और उपयोगकर्ता स्थिति की अन्य विविधताएं सत्यापित हैं, जैसे निमंत्रण स्थिति, उपयोगकर्ता

describe Users::OmniauthCallbacksController do 
    before :each do 
    # This a Devise specific thing for functional tests. See https://github.com/plataformatec/devise/issues/608 
    request.env["devise.mapping"] = Devise.mappings[:user] 
    end 
    describe ".create" do 

    it "should redirect back to sign_up page with an error when omniauth.auth is missing" do 
     @controller.stub!(:env).and_return({"some_other_key" => "some_other_value"}) 
     get :facebook 
     flash[:error].should be 
     flash[:error].should match /Unexpected response from Facebook\./ 
     response.should redirect_to new_user_registration_url 
    end 

    it "should redirect back to sign_up page with an error when provider is missing" do 
     stub_env_for_omniauth(nil) 
     get :facebook 
     flash[:error].should be 
     flash[:error].should match /Unexpected response from Facebook: Provider information is missing/ 
     response.should redirect_to new_user_registration_url 
    end 
    end 
end 

stub_env_for_omniauth विधि के रूप में परिभाषित के साथ इस प्रकार है::

def stub_env_for_omniauth(provider = "facebook", uid = "1234567", email = "[email protected]", name = "John Doe") 
    env = { "omniauth.auth" => { "provider" => provider, "uid" => uid, "info" => { "email" => email, "name" => name } } } 
    @controller.stub!(:env).and_return(env) 
    env 
end 
+0

चाहिए नहीं 'stub_env_for_omniauth' विधि वापसी OmniAuth :: AuthHash वस्तु, बल्कि एक हैश से खाता व्यवस्थापक, आदि) द्वारा अक्षम किया जा रहा ? – user3021270