RSpec: फ़ीचर और अनुरोध युक्ति में क्या अंतर है?


113

Rspec के फीचर स्पेक्स और रिक्वेस्ट स्पेक्स के बीच वैचारिक अंतर क्या है ?

फ़ीचर स्पेक डॉक्स से:

फ़ीचर स्पेक्स उच्च-स्तरीय परीक्षण हैं जो एक एप्लिकेशन के माध्यम से कार्यक्षमता के स्लाइस का उपयोग करने के लिए हैं। उन्हें केवल अपने बाहरी इंटरफ़ेस, आमतौर पर वेब पृष्ठों के माध्यम से ही आवेदन करना चाहिए।

और अनुरोध चश्मा के लिए:

अनुरोध चश्मा रेल के एकीकरण परीक्षणों के आसपास एक पतली आवरण प्रदान करते हैं, और रूटिंग (रेल द्वारा प्रदान) और स्टबिंग के बिना (यह आप पर निर्भर है) सहित पूरे स्टैक के माध्यम से ड्राइव करने के लिए डिज़ाइन किए गए हैं। अनुरोध चश्मा के साथ, आप कर सकते हैं:

  • एकल अनुरोध निर्दिष्ट करें
  • कई नियंत्रकों में कई अनुरोध निर्दिष्ट करें
  • कई सत्रों में कई अनुरोध निर्दिष्ट करें

मुझे पता है कि फ़ीचर स्पेक्स Capybara का उपयोग करते हैं और अनुरोध चश्मा नहीं करते हैं। लेकिन यह शायद ही विभिन्न अवधारणाओं का गुण है।

जवाबों:


147

वैचारिक अंतर यह है कि आप आमतौर पर एक उपयोगकर्ता कहानी का परीक्षण कर रहे हैं, और सभी इंटरैक्शन को उपयोगकर्ता इंटरफ़ेस के माध्यम से संचालित किया जाना चाहिए। यही कारण है कि Capybara में आता है। एक अनुरोध युक्ति अभी भी आपके आवेदन के व्यवहार का परीक्षण कर रही है और पठनीयता की उम्मीद नहीं है कि एक स्वीकृति परीक्षण होगा। इसलिए, स्वीकृति परीक्षणों के लिए बेहतर सिंटैक्स के लिए सुविधा है।

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

मैं github पर rspec- रेल स्रोत कोड में feature_spec.feature पढ़ने की सलाह दूंगा। आशा है कि ये आपकी मदद करेगा।


2
तो क्या आप फीचर और रिक्वेस्ट स्पेक्स दोनों का उपयोग करने की सलाह देंगे या एक या दूसरे पर्याप्त हैं? (TDD के लिए नया होने के नाते ...)
robertwbradford

2
मैं दोनों का उपयोग करता हूं, @robertwbradford। मैं परीक्षण में अपने बाहर ड्राइव करने के लिए फीचर स्पेक्स का उपयोग करता हूं - उपयोगकर्ता अनुभव का परीक्षण करना और फिर यूनिट परीक्षणों का उपयोग करके कार्यक्षमता का निर्माण करना। मैं परीक्षण प्रतिक्रियाओं के लिए अनुरोध स्पेक्स का उपयोग करता हूं - उदाहरण के लिए एक session_spec में मेरे पास एक ब्लॉक के रूप में और , या एक ब्लॉक "GET /login"में उम्मीदों के साथ वर्णन ब्लॉक हो सकता है , औरitexpect(response.status).to eq(200)expect(response).to render_template(:new)describe "POST /sessions"context "with valid credentials"expect(response).to redirect_to(user)follow_redirect!; expect(response.body).to include("Signed in")
रिचर्ड जॉर्डन

5
और क्या आप कंट्रोलर स्पेक्स का भी उपयोग करते हैं? ऐसा लगता है कि आपके द्वारा अनुरोध चश्मे में परीक्षण और सामान्य रूप से नियंत्रक चश्मा में सामान्य रूप से परीक्षण के बीच दोहराव है।
अर्नेस्टो

5
यह कहते हुए कि, उपरोक्त लिंक पोस्ट स्पष्ट रूप से मतभेदों का वर्णन करता है। एपीआई के माध्यम से परीक्षण करने के लिए अनुरोध चश्मे का उपयोग करें, दृश्यपटल के माध्यम से परीक्षण करने के लिए सुविधा चश्मा का उपयोग करें।
डेमियन रोशे

2
@ रीचर्ड जोर्डन: एक प्रश्न: फ़ीचर स्पेक्स में, क्या आप रेल पथ (यानी visit users_path) या हार्डकोड स्ट्रिंग्स ( visit '/users') का उपयोग करने की अनुशंसा करेंगे ? व्यक्तिगत रूप से, मैं इस तरह के चश्मे में किसी भी ऐप इंटर्नल का उपयोग नहीं करना पसंद करता हूं।
टोकन लैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.