Rspec में परीक्षणों के एक समूह को अक्षम करें?


103

मेरे पास एक परीक्षण युक्ति है जो describesएक वर्ग है और उसके भीतर contextsविभिन्न itब्लॉकों के साथ प्रत्येक है ।

क्या कोई तरीका है जिससे मैं contextअस्थायी रूप से अक्षम कर सकता हूं ?

मैंने pending "temporarily disabled"बहुत ही शीर्ष पर एक कॉल को जोड़ने की कोशिश की , जिसे contextमैं अक्षम करना चाहता हूं, और जब मैंने युक्ति चलाई, तब मैंने लंबित के बारे में कुछ देखा, लेकिन तब यह बाकी परीक्षणों को चलाता रहा।

यह मेरे पास था:

describe Something
  context "some tests" do
    it "should blah" do
      true
    end
  end

  context "some other tests" do
    pending "temporarily disabled"

    it "should do something destructive" do
      blah
    end
  end
end

लेकिन जैसा मैंने कहा कि यह लंबित कॉल के नीचे परीक्षण चलाने के लिए चला गया।

खोज ने मुझे इस मेलिंग सूची थ्रेड में ले गया, जिसमें rspec के निर्माता (?) का कहना है कि यह rspec 2 में संभव है, जिसे मैं चला रहा हूं। मुझे लगता है कि यह काम करता था, लेकिन इसमें निम्नलिखित सभी परीक्षणों को अक्षम करने का वांछित प्रभाव नहीं था, जो कि मुझे लगता है कि जब मैं एक pendingकॉल देखता हूं ।

क्या कोई विकल्प है या क्या मैं इसे गलत कर रहा हूं?

जवाबों:


166

RSpec 3 का उपयोग कर चश्मे के एक पेड़ को निष्क्रिय करने के लिए आप कर सकते हैं:

before { skip }
# or 
xdescribe
# or 
xcontext

आप स्किप के साथ एक संदेश जोड़ सकते हैं जो आउटपुट में दिखाई देगा:

before { skip("Awaiting a fix in the gem") }

RSpec 2 के साथ :

before { pending }

1
आप वास्तव में कैसे करते हैं कि एक ब्लॉक पर है:describe 'XXXXX' do .... end
p.matsinopoulos

2
@ p.matsinopoulos बस इसे निम्नलिखित पंक्ति में जोड़ें describe 'XXXXX' do। एक आकर्षण की तरह काम किया, धन्यवाद @Pyro!
चेस्टरबर

फिल्टर की तुलना में सरल समाधान, +1
dolzenko

मैं तुमसे प्यार करता हूँ। मुझ पर आपकी एक बीयर उधार है!
एल्डो 'xoen' Giambelluca

2
यह अच्छा है। आप 'स्किप' के बाद एक संदेश भी शामिल कर सकते हैं जो आउटपुट में दिखाई देगा।
जनवरी को Jan Hettich

44

बहिष्करण फ़िल्टर का उपयोग करें । उस पृष्ठ से: आपके spec_helper.rb(या rails_helper.rb) में

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end

आपके परीक्षण में:

describe "group 1", :broken => true do
  it "group 1 example 1" do
  end

  it "group 1 example 2" do
  end
end

describe "group 2" do
  it "group 2 example 1" do
  end
end

जब मैं "rspec ./spec/sample_spec.rb --format doc" चलाता हूं

फिर आउटपुट में "समूह 2 उदाहरण 1" होना चाहिए

और आउटपुट में "समूह 1 उदाहरण 1" नहीं होना चाहिए

और आउटपुट में "समूह 1 उदाहरण 2" नहीं होना चाहिए


19

देखें कि आप इसके बारे में क्या सोचते हैं:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

जब मैं "थोड़ी देर" के लिए कुछ अक्षम कर रहा होता हूं, तो मुझे अपनी लंबित वस्तुओं के कारण देखना पसंद है। वे छोटी टिप्पणियों / TODOs के रूप में कार्य करते हैं, जो नियमित रूप से एक टिप्पणी या एक अपवर्जित उदाहरण / फ़ाइल में दफन करने के बजाय प्रस्तुत किए जाते हैं।

बदलने itके लिए pendingया xitत्वरित और आसान है, लेकिन मैं हैश निर्माण पसंद करते हैं। यह आपको प्रत्येक रन प्रलेखन देता है, एक ड्रॉप-इन है (वर्णन / संदर्भ नहीं बदलता है / इसलिए मुझे यह निर्णय लेना है कि बाद में फिर से क्या उपयोग करना है), और जैसे ही निर्णय लिया जाता है या अवरोधक हटा दिया जाता है, वैसे ही आसानी से हटा दिया जाता है ।

यह समूहों और व्यक्तिगत उदाहरणों के लिए समान काम करता है।


इसके अलावा, मुझे यकीन नहीं है कि अगर यह वर्णन के लिए समान काम करता है, लेकिन वास्तव में लंबित परीक्षण चलाता है, और विफल हो जाता है यदि परीक्षण पास होना शुरू हो जाता है। Xdescribe (मुझे लगता है जैसे xit) - बस इसे नहीं चलाता है।
पीएल जे

1
पुष्टि की कि यह काम करता है, दोनों के साथ pending:और skip:, rspec 3.6.0 में। मेरे लिए सबसे अच्छा समाधान की तरह लगता है। rspec3 में अभी भी परीक्षण चल रहे हैं, लेकिन skip(हालांकि आप लागू नहीं करते हैं skip)।
जुलकिंड

9

और एक। https://gist.github.com/1300152

इसे अक्षम करने के लिए xdescribe, xcontext, xit का उपयोग करें।

अपडेट करें:

2.11 rspec के बाद से, इसमें डिफ़ॉल्ट रूप से xit शामिल है। इसलिए नया कोड होगा

# put into spec_helper.rb
module RSpec
  module Core
    module DSL
      def xdescribe(*args, &blk)
        describe *args do
          pending 
        end
      end

      alias xcontext xdescribe
    end
  end
end

प्रयोग

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 

3

वर्णन के बजाय लंबित का उपयोग करें। यदि आपका ब्लॉक है:

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

आप पूरे ब्लॉक को इसके द्वारा छोड़ सकते हैं:

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

1
describe "GET /blah" do

  before(:each) { pending "Feature to be implemented..." }

  it { expect(page).to have_button("Submit") }
  it { expect(page).to have_content("Blah") }
end

0

बस यह समझाने के लिए कि आपके कोड के साथ क्या हो रहा है। आपके पास जहां है, उसे शामिल करना, यह सिर्फ मूल्यांकन किया जाता है (और इसलिए चलाते हैं) जब स्टार्टअप के दौरान फ़ाइल लोड होती है। हालाँकि आपको परीक्षण चलाने के लिए इसे चलाने की आवश्यकता है। इसीलिए उत्तर ने एक ब्लॉक में pending(RSpec 2) या skip(RSpec 3) डालने का सुझाव दिया है before

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