RSpec नियंत्रक परीक्षण - रिक्त प्रतिक्रिया


103

RSpec के साथ अपने नियंत्रकों का परीक्षण करते समय मैं एक समस्या से फंस गया हूं - प्रतिक्रिया। कोई भी कॉल हमेशा एक खाली स्ट्रिंग देता है। ब्राउज़र में सब कुछ सही तरीके से प्रस्तुत होता है, और ककड़ी सुविधा परीक्षण इसे सही लगता है, लेकिन RSpec हर बार विफल रहता है।

प्रतिक्रिया वस्तु पर अन्य अपेक्षाएँ, जैसे कि response.should render_template('index') बिना किसी समस्या के पास।

क्या आप में से किसी ने भी इस समस्या का सामना किया है? शायद प्रतिक्रिया html किसी अन्य तरीके से प्राप्त किया जा सकता है?

संस्करणों के लिए, रेलगाड़ी 2.1.0, RSpec 1.2.7।

जवाबों:


194

डिफ़ॉल्ट रूप से, rspec-rails हैक को वास्तव में रेंडर करने वाले व्यू टेम्प्लेट से रोकने के लिए रेल में हैक करता है । आपको केवल अपने कार्यों के व्यवहार का परीक्षण करना चाहिए और अपने नियंत्रक परीक्षणों को फ़िल्टर करना चाहिए, न कि टेम्प्लेट रेंडरिंग के परिणाम - यह वही है जो देखने के लिए चश्मा है।

हालाँकि, यदि आप अपने नियंत्रक चश्मा बनाने की इच्छा रखते हैं, तो सामान्य रूप से एप्लिकेशन को टेम्प्लेट प्रस्तुत करना होगा, render_viewsनिर्देश का उपयोग करें :

describe YourController do
  render_views
  ...
end

2
धन्यवाद, वास्तव में मुझे क्या चाहिए।
टॉम्स मिकॉस

2
मैं वर्षों से रेल के साथ काम कर रहा हूं और अब मैं अंत में नियंत्रक और अनुरोध चश्मा के बीच अंतर को समझता हूं। धन्यवाद!
ब्रायन अंडरवुड


2

जैसा कि मैंने एक समान समस्या के साथ काम किया (जिससे मुझे इस सवाल का सामना करना पड़ा), यह मेरे लिए हुआ कि एक ही बिल्ली की त्वचा के अलग-अलग तरीके हैं। दूसरे शब्दों में, शरीर के पाठ की जाँच करने के बजाय, आप फ़्लैश की सामग्री की जाँच करने में सक्षम हो सकते हैं।

response.body.should =~ /Invalid email or password/

इसके बराबर जांच हो सकती है:

flash[:alert].should == "Invalid email or password"

मेरे लिए उत्तरार्द्ध थोड़ा अधिक लचीला लगता है क्योंकि यह किसी भी तरह से चलेगा, लेकिन यह सभी मामलों में उचित नहीं हो सकता है।

चीयर्स,

जॉन


2

डिफ़ॉल्ट रूप से, RSpec-rails कॉन्फ़िगरेशन नियंत्रक ऐनक के लिए टेम्प्लेट के प्रतिपादन को अक्षम करता है

इसे ठीक करने के तरीकों में से एक render_viewsआपकी rails_helper.rbफ़ाइल में सेटिंग को सक्षम करना सुनिश्चित करता है। इस तरह, आप इसे अपने सभी परीक्षणों में विश्व स्तर पर काम करने में सक्षम बनाते हैं।

RSpec.configure do |config|
  config.render_views
end

या एक व्यक्तिगत समूह के रेंडर_व्यू का उपयोग करें:

describe User do
  render_views
end

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.