RSpec: वर्णन, संदर्भ, सुविधा, परिदृश्य?


जवाबों:


149

के contextलिए एक उपनाम है describe, इसलिए वे कार्यात्मक रूप से समतुल्य हैं। आप उनका उपयोग परस्पर विनिमय के लिए कर सकते हैं, केवल अंतर यह है कि आपकी कल्पना फ़ाइल कैसे पढ़ती है। उदाहरण के लिए परीक्षण आउटपुट में कोई अंतर नहीं है। RSpec पुस्तक कहती है:

"हम describe()चीजों और context()संदर्भ के लिए उपयोग करते हैं "।

व्यक्तिगत रूप से मैं उपयोग describeकरना पसंद करता हूं, लेकिन मैं देख सकता हूं कि लोग क्यों पसंद करते हैं context

featureऔर scenarioCapybara का एक हिस्सा हैं, और RSpec नहीं है, और स्वीकृति परीक्षणों के लिए उपयोग किया जाता है। / के featureबराबर है , और / के बराबर है ।describecontextscenarioitexample

Capybara साथ आप कर रहे हैं लेखन स्वीकृति परीक्षण का उपयोग करते हैं feature/ scenarioवाक्य रचना, अगर प्रयोग नहीं describe/ itवाक्य रचना।


1
सैम बिंदु पर है और यहां अधिक विवरण और उत्कृष्ट उदाहरणों के साथ एक लिंक दिया गया है, विशेष रूप से Capybara के लिए सेक्शन में बनाया गया है जो कि DSL (डोमेन विशिष्ट भाषा) में बनाया गया है: github.com/jnicklas/capybara#using-capybara-with-rspec
SpartaSixZero

36

आज सुबह, कुछ चश्मा लिखते समय, मैं एक ही सवाल कर रहा था। आमतौर पर, मैं मुख्य रूप से उपयोग करता हूं describeऔर इस बारे में विशेष रूप से नहीं सोचता हूं, लेकिन आज सुबह मैं एक मॉड्यूल के लिए बहुत सारे मामलों और विभिन्न चश्मे के साथ काम कर रहा था, इसलिए इसे अगले डेवलपर के लिए आसानी से समझा जा सकता था जो उन चश्मे को पढ़ेंगे। इसलिए मैंने Google से इस बारे में पूछा, और मुझे यह मिला: वर्णन बनाम rspec में , जिसका उत्तर मुझे काफी रोचक लगा:

Rspec स्रोत कोड के अनुसार, "संदर्भ" केवल "वर्णन" का एक अन्य तरीका है, जिसका अर्थ है कि इन दो तरीकों के बीच कोई कार्यात्मक अंतर नहीं है। हालाँकि, एक प्रासंगिक अंतर है जो इन दोनों का उपयोग करके आपके परीक्षणों को अधिक समझने में मदद करेगा।

"वर्णन" का उद्देश्य एक कार्यक्षमता के खिलाफ परीक्षणों का एक सेट लपेटना है, जबकि "संदर्भ" एक ही राज्य के तहत एक कार्यक्षमता के खिलाफ परीक्षणों का एक सेट लपेटना है।

इसलिए, इस सिद्धांत पर भरोसा करते हुए, आप इस तरह एक कल्पना लिखेंगे:

#
# The feature/behaviour I'm currently testing
#
describe "item ordering" do
  
  # 1st state of the feature/behaviour I'm testing
  context "without a order param" do
    ...
  end

  # 2nd state of the feature/behaviour I'm testing
  context "with a given order column" do
    ..
  end

  # Last state of the feature/behaviour I'm testing
  context "with a given order column + reverse" do
    ..
  end
end

यकीन नहीं होता कि यह आम तौर पर स्वीकृत नियम है, लेकिन मुझे यह दृष्टिकोण स्पष्ट और समझ में आसान है।


1
वर्णन / संदर्भ के लिए यह बहुत अच्छा उत्तर है। लेकिन आप फ़ीचर / परिदृश्य के बारे में प्रश्न के अन्य आधे को भूल गए - हालांकि मुझे लगता है कि वे वर्णन (संदर्भ) के लिए उसी तरह से उपयोग किए जा सकते हैं (और चाहिए)।
rmcsharry

यदि आपने इसे फीचर / परिदृश्य की व्याख्या के साथ विस्तारित किया तो बहुत अच्छा होगा!
ग्रेडफॉक्स

0

डॉक्स के अनुसार पियरे के उत्कृष्ट उत्तर पर विस्तार :

फीचर और परिदृश्य डीएसएल क्रमशः वर्णन और इसे करने के लिए अनुरूप है। ये विधियां केवल उपनाम हैं जो सुविधा चश्मा को ग्राहक और स्वीकृति परीक्षणों के रूप में अधिक पढ़ने की अनुमति देती हैं।

इसलिए मोचा से परिचित लोगों के लिए यह वर्णन करता है और यह (जो उपयोगकर्ता के दृष्टिकोण से परीक्षण के व्यवहार का वर्णन करने के लिए बेहतर अनुकूल है, इसलिए मोचा मुख्य रूप से फ्रंट एंड टेस्टिंग फ्रेमवर्क के रूप में कार्य कर रहा है), आप कर सकते हैं:

  • हमेशा और केवल उपयोग describeऔर itया एक और बाँधना चुनें
  • itएक contextब्लॉक के अंदर उपयोग करने का चयन करें जिसके लिए एक विशिष्ट ऐप राज्य में कई अभिकथन / परीक्षण की आवश्यकता होती है

दूसरे विकल्प के साथ, आप अभी भी "... रैप [पिंग] एक ही राज्य के तहत एक कार्यक्षमता के खिलाफ परीक्षणों का एक सेट" के इरादे का पालन कर सकते हैं।

इस प्रकार आपके परीक्षण इस तरह दिख सकते हैं:

#
# The feature/behaviour I'm currently testing
#
describe "item ordering" do

  # 1st state of the feature/behaviour I'm testing
  context "without an order param" do
    # 1st and only test we want to run in this state
    it "asks the user for missing order param" do
     ...
    end
  end

  # 2nd state of the feature/behaviour I'm testing
  context "with an invalid order param" do
    # 1st test we want to run in this state
    it "validates and rejects order param" do
      ...
    end
    # 2nd test we want to run in this state
    it "returns an error to user" do
      ...
    end
  end

  # 3rd state of the feature/behaviour I'm testing with multiple tests
  context "with a valid order param" do
    it "validates and accepts order param" do
      ...
    end
    it "displays correct price for order" do
      ...
    end
    unless being_audited
      it "secretly charges higher price to user" do
        ...
      end
    end
  end
end

इस तरह आप featureकीवर्ड को पूरी तरह से छोड़ देते हैं , जिसे आप विशिष्ट फ्रंट एंड फीचर्स के लिए उपयोग करना चाहते हैं या यदि आप FDD (सुविधा संचालित विकास) कर रहे हैं, जो कुछ के लिए असहज महसूस कर सकता है। इनपुट के लिए अपनी डेवलपर टीम से यहां पूछें।

कैविएट: हमेशा उद्योग के मानकों का पालन नहीं करते हैं, कल्पना करें कि क्या हम वोक्सवैगन दर्शन के बाद अपने सभी परीक्षणों को मॉडल करते हैं?

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