RSpec और ककड़ी के बीच अंतर क्या है? [बन्द है]


114

मेरे पास 6 महीने के रेल विकास का अनुभव है। मैंने एक वेब एप्लिकेशन बनाया है जो अब प्रमाणीकरण और प्राधिकरण और पोस्टग्रैक्स्ल डीबी के साथ उपयोग में है।

मैं अपने दूसरे रेल एप्लिकेशन पर जा रहा हूं लेकिन इस बार, सबक सीखने के बाद, मैं इसे TDD का उपयोग करके विकसित करना चाहूंगा, क्योंकि मैंने इसे स्केल करने और बग को ठीक करने के लिए बहुत आसान देखा। यह विकसित होने में धीमी है लेकिन लंबे समय में इससे निपटने के लिए बहुत आसान है।

मैंने Rspec और ककड़ी के बारे में सुना है, लेकिन उनके द्वारा अच्छी तरह से भ्रमित हूं।

मैं जानना चाहता हूं कि RSpec और ककड़ी में क्या अंतर है और वे किस लिए उपयोग किए जाते हैं।

यह जानना भी उपयोगी होगा कि, एक शुरुआत के परिप्रेक्ष्य से (जो एकमात्र डेवलपर भी है) कि क्या परीक्षण ढांचे की वास्तव में आवश्यकता है।


6
आपको और अधिक भ्रमित करने के लिए, मिनिटेस्ट भी एक विकल्प हो सकता है
लुकास क्लेमेंटेट

5
Capybara वास्तव में एक ड्राइवर है जो किसी भी परीक्षण ढांचे में इस्तेमाल किया जा सकता है, न कि स्वयं के ढांचे में। वाटर-वेबड्राइवर और सेलेनियम दो चीजें हैं जो एक समान कार्य करती हैं, लेकिन एक वास्तविक ब्राउज़र चलाती हैं और Capybara ड्राइविंग रैक की तुलना में बहुत धीमी हैं :: टेस्ट
DVG

37
यह कैसे रचनात्मक नहीं है ???
जेसन स्विट

19
शानदार सवाल और शानदार जवाब। यह वही है जो मुझे चाहिए था। मैं प्रश्न के बंद होने से अप्रभावित हूं। अगर यह बहस करने जा रहा है तो कौन परवाह करता है? यही समुदाय के मतदान के लिए है।
dpurrington

14
जैसा कि मुझे लगता है कि प्रश्न को बंद करने का आधार विश्वसनीय है, फिर से खोलना मतदान है। यह निश्चित रूप से हो सकता है (और किया गया है!) "तथ्यों, संदर्भों या विशेषज्ञता द्वारा समर्थित" का उपयोग करके उत्तर दिया गया है, और किसी भी StackOverflow सवाल संभवतः "विवादास्पद बहस, बहस, मतदान की संभावना होगी" (जिसे हम सभी जानते हैं और देखा है)। "मतदान" के लिए? SO का मॉडस ऑपरेंडी सवाल और जवाब को उभारने और कम करने के बारे में है। यह मूल रूप से एक बड़ा मतदान है। इसे बंद करना बहुत कठिन था। यह विषय प्रश्न और उत्तर पर एक अच्छा सहायक है ।
एडम कैमरन

जवाबों:


323

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

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

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

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

बस दोनों के बीच मुख्य अंतर को प्रदर्शित करने के लिए:

खीरा:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

rspec

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

यह ब्लॉग श्रृंखला RSpec के साथ होने पर उत्कृष्ट है।


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

2
मैं इस जवाब की आवश्यकता में किसी को भी कम सुझा नहीं सकता था। विवरण के लिए धन्यवाद!
इकॉन

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