में पुनर्निर्देश मैं एक OmniauthCallbacksController < Devise::OmniauthCallbacksController
जो एक OmniAuth कॉलबैक संभालने के लिए एकल विधि शामिल लागू किया है Railscast on Devise and OmniAuth के बाद:Rspec: टेस्ट वसीयत :: OmniauthCallbacksController उपवर्ग
def all
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
sign_in_and_redirect user
else
session["devise.user_attributes"] = user.attributes
redirect_to new_user_registration_url
end
end
alias_method :facebook, :all
routes.rb:
devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks", :sessions => "sessions" }
मैं इसे कस्टमाइज़ करना चाहता हूं, इसलिए मैं आरएसपीईसी का उपयोग करके इसका परीक्षण करने की कोशिश कर रहा हूं। सवाल यह है कि मैं इस विधि और रीडायरेक्ट का परीक्षण कैसे करूं?
यदि spec में मैंने user_omniauth_callback_path(:facebook)
डाल दिया है तो यह उस मार्ग के बारे में शिकायत नहीं करता है जो मौजूदा नहीं है, लेकिन वास्तव में विधि को कॉल नहीं करता है।
this answer के अनुसार "नियंत्रक परीक्षण चार HTTP क्रियाएं (GET, POST, PUT, DELETE) का उपयोग करते हैं, भले ही आपका नियंत्रक रीस्टफुल है या नहीं।" मैंने get user_...
इत्यादि की कोशिश की लेकिन यहां यह शिकायत करता है कि मार्ग मौजूद नहीं है। और वास्तव में यह पता चलता है इस मार्ग के लिए कोई HTTP क्रिया होती है अगर मैं rake routes
कार्य करें:
user_omniauth_callback [BLANK] /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:facebook)
आप देख सकते हैं कि मैं क्या याद कर रहा हूँ?
संपादित
तो विधि बुलाने की this question एक तरह से पीछा कर रहा है:
controller.send(:all)
हालांकि मैं तो एक ही त्रुटि प्राप्त है कि प्रश्नकर्ता में भाग:
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil
बिल्कुल सही। कई स्तरों पर सहायक, कम से कम मैं इस बारे में एक फीचर स्पेक की बजाय नियंत्रक स्पेक के रूप में सोच रहा था। बहुत सराहना की! –
मदद करने के लिए खुशी हुई! यह मुझे डेढ़ घंटे तक मेरे घुटनों पर लाया। मुझे खुशी है कि कोई और मेरी निराशा से लाभ उठा सकता है! वाक्यविन्यास बहुत दूर था? यदि ऐसा है, तो कृपया सही समाधान के साथ संपादित करें। धन्यवाद! –
वाक्यविन्यास पूरी तरह से काम किया। मेरे द्वारा किए गए एकमात्र परिवर्तन spec_helper.rb में थोड़ा सा खींच रहा था [इस उत्तर] (http://stackoverflow.com/a/9915796/1450420) जो मुझे आपके उत्तर के लिए धन्यवाद मिला। –