मैं एक वैकल्पिक, सरल दृष्टिकोण की अनुशंसा करता हूं। क्या होगा यदि आपने यह देखने के लिए सीधे कॉलबैक नियंत्रक का परीक्षण किया कि यह 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
स्रोत
2012-09-22 20:21:38
चाहिए नहीं 'stub_env_for_omniauth' विधि वापसी OmniAuth :: AuthHash वस्तु, बल्कि एक हैश से खाता व्यवस्थापक, आदि) द्वारा अक्षम किया जा रहा ? – user3021270