2011-07-22 17 views
17

में एक HTTPS (एसएसएल) अनुरोध का परीक्षण करें मैं रेल 3.1rc4 में force_ssl feature का लाभ लेना चाहता हूं।आरएसपीसी रेल

class ApplicationController < ActionController::Base 
    force_ssl 
end 

समस्या यह है कि यह मेरे सभी मौजूदा आरएसपीसी नियंत्रक चश्मा तोड़ता है। उदाहरण के लिए, इस विफल रहता है:

describe "GET 'index'" do 
    it "renders the Start page" do 
    get :index 
    response.should render_template 'index' 
    end 
end 

इसके बजाय पेज प्रतिपादन की प्रतिक्रिया एक 301 https://test.host/ पर पुन: निर्देशित है।

मैं अपने चश्मे को एक HTTPS GET/POST अनुकरण करने के लिए कैसे बदल सकता हूं?

और क्या मुझे प्रत्येक परीक्षा को मैन्युअल रूप से बदलना है या क्या कोई आसान तरीका है? (मुझे पता है मैं केवल उत्पादन में force_ssl आह्वान सकता है, लेकिन यह आदर्श नहीं है वास्तव में, मैं परीक्षण किया जाना चाहिए कि force_ssl वास्तव में https पर पुन: निर्देशित करता है:।। // जब उम्मीद) में

उत्तर

39

निर्देश देने के लिए RSpec एक नियंत्रक कल्पना उपयोग में एसएसएल अनुरोध करने के लिए:

request.env['HTTPS'] = 'on' 

अपने उदाहरण में इस तरह दिखता है:

describe "GET 'index'" do 
    it "renders the Start page" do 
    request.env['HTTPS'] = 'on' 
    get :index 
    response.should render_template 'index' 
    end 
end 
+0

यह आरएसपीसी 2.10 के साथ काम नहीं करता है। यहां देखें: https: // github।com/rspec/rspec-rails/issues/534 –

+2

मैं rspe 2.11.0 का उपयोग कर रहा हूं और मुझे हमेशा यह त्रुटि संदेश मिल रहा है: "शून्य के लिए अपरिभाषित विधि 'env': NilClass"। –

+1

यह नोटिंग रेल-आरएसपीसी 2.14 और डेविस 3.0.0 https://github.com/rspec/rspec-rails/issues/534#issuecomment-21560832 –

0

आप बिल्कुल एसएसएल की जरूरत है, कहीं भी अपने आवेदन, आपको अपने आवेदन में हर जगह इसका इस्तेमाल करना चाहिए। तो आपको केवल rack-ssl मणि का उपयोग करना है और अपने पर Rack::SSL मिडलवेयर जोड़ें। कोई अतिरिक्त परीक्षण की आवश्यकता नहीं है; कोई ब्रेकेज नहीं; समस्या सुलझ गयी।

+0

धन्यवाद @Justice, लेकिन अगर Rails.env.production 'जो शायद आसान है' रैक ssl' समाधान के अंतिम परिणाम 'force_ssl को अलग नहीं है?। किसी भी मामले में, क्या यह दर्पण उत्पादन के परीक्षण के लिए बेहतर अभ्यास नहीं है, जिससे आप एसएसएल रीडायरेक्ट के लिए परीक्षण कर सकते हैं? यही वह है जो मैं करना चाहता हूं, लेकिन केवल अगर आरएसपीईसी HTTPS अनुरोधों को अनुकरण करने में सक्षम है। – naudster

+1

सही। लेकिन यह बात नहीं है। मुद्दा यह है कि यदि आपकी पूरी साइट उत्पादन में पूरी तरह से एसएसएल है, तो इसके लिए आपको किसी भी टेस्ट केस लिखने की आवश्यकता नहीं है। बस उस मणि की आवश्यकता है और अपने उत्पादन वातावरण में उस मिडलवेयर का उपयोग करें, और आप जाने के लिए अच्छे हैं। याद रखें, यह केवल तभी काम करता है जब आपकी पूरी साइट एसएसएल से अधिक हो, न केवल आपकी साइट के कुछ टुकड़े। लेकिन, एक सामान्य सुरक्षा सिद्धांत के रूप में, यदि आपकी साइट के किसी भी भाग को SSL पर होना आवश्यक है, तो आपकी साइट के * सभी * को SSL पर होना आवश्यक है। – yfeldblum

+0

यह दुर्भाग्य से सार्वभौमिक रूप से सही सिद्धांत नहीं है। यह 50% के आदेश पर अधिक है। अक्सर आप सार्वजनिक संसाधन चाहते हैं जो प्रदर्शन और स्केलेबिलिटी कारणों के लिए कैशबल हैं। यदि आपका अधिकांश ट्रैफ़िक सार्वजनिक अनधिकृत ट्रैफ़िक है (जो कि एक आम ट्रैफ़िक प्रोफ़ाइल है) तो सार्वभौमिक एसएसएल आपके द्वारा भुगतान करना चाहते हैं उससे अधिक लागत हो सकती है। – gtd

2
rspec 3 वाक्य रचना के लिए

, https://stackoverflow.com/a/28361428/1107433

get :index, protocol: 'https://' 

एक मामूली अलग संस्करण हो सकता है जो ऊपर कोड काम नहीं करता है। तो नीचे दिए गए कोड का उपयोग करें:

get :index, protocol: :https

+0

मुझे इसे काम करने के लिए 'प्रोटोकॉल:' https'' का उपयोग करना पड़ा –

+0

मुझे यकीन नहीं है। मेरा काम अच्छी तरह से है। लेकिन मैं जवाब अपडेट कर दूंगा। –

संबंधित मुद्दे