क्या मिनीटेस्ट में सिंगल टेस्ट चलाना संभव है?


168

मैं एक ही फ़ाइल में सभी परीक्षण चला सकता हूं:

rake test TEST=path/to/test_file.rb

हालाँकि, अगर मैं उस फ़ाइल में सिर्फ एक परीक्षण चलाना चाहता हूं, तो मैं यह कैसे करूंगा?

मैं समान कार्यक्षमता की तलाश में हूं:

rspec path/to/test_file.rb -l 25

3
8 साल बाद और रेल के लिए 5+ उपयोगकर्ता rails test path/to/test_file.rb:25@Derek_Hill ans - guide.rubyonrails.org/testing.html#the-rails-test-runner
notapatch

जवाबों:


44

मैं rspec पथ / / to file.rb -l 25 के लिए समान कार्यक्षमता की तलाश कर रहा हूं

हाँ! Nick Quaranto के "m" रत्न का उपयोग करें । इसके साथ आप कह सकते हैं:

m spec/my_spec.rb:25

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

3
सच है, मैं सहमत हूं। मैं वास्तव में कामना करता हूं कि आप एक विकल्प के रूप में इन-पास कर दें ... या कि मिनीटेस्ट ने सिर्फ लाइन नंबरों के साथ-साथ विधि के नामों का उपयोग किया।
इलियट विंकलर


जबकि यह रत्न एकल परीक्षण चलाने के समान तरीके से चीजों को बनाता है, मिनिटेस्ट के पास एकल परीक्षण चलाने का एक अंतर्निहित तरीका है जो वास्तव में प्रश्न था। निर्भरता आवश्यक नहीं है। यह जानना अच्छा है कि एक सहायक मणि के साथ आसान हो सकता है (जैसे कि कई आस-पास हो सकता है) लेकिन मुझे लगता है कि इस सवाल के लिए, jduan या रैंडमोर जैसे शुद्ध मिनिटेस्ट उत्तर बेहतर फिट होंगे
cefigueiredo

209

कमांड होनी चाहिए:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"

6
+1 - यह वही है जो आप करना चाहते हैं। आप एक विशिष्ट फ़ाइल में सभी परीक्षण परीक्षण करना चाहते हैं, बस छोड़ TESTOPTS=...दूर
awenkhh

बहुत उपयोगी जवाब। मैं परीक्षण रिपोर्ट के अंत में विफल परीक्षणों के पुन: आदेशों को दिखाने के लिए MinitestReporter बनाता हूं। देखें: gist.github.com/foton/141b9f73caccf13ccfcc
Foton

1
क्या करता -vहै?
जॉन श्नाइडर

149

आपने कोशिश की है:

ruby path/to/test_file.rb --name test_method_name

10
Minispec का उपयोग कर परीक्षण के बारे में क्या, जैसे परिभाषित किया गया है specify {}? वे बस के रूप में दिखाते हैं test_0001_anonymous... और कई test_0001_anonymousएस हो सकते हैं यदि एक ही वाक्यविन्यास का उपयोग कई वर्णन ब्लॉकों में किया जाता है ... इस तरह के वातावरण में एकल परीक्षण चलाने के लिए कोई सुझाव?
नीपर

1
"tc" का अर्थ "टेस्ट केस" है।
एंड्रयू ग्रिम

4
यह कहता है cannot load such file -- test_helper
एक्स-यूरी

11
stackoverflow.com/a/15714985/327786 कीruby -Itest path/to/tc_file.rb --name test_method_name तरह उपयोग करें
TlmaK0

bundle exec ruby -I lib path/to --name test_fit
पचू


49

यह उन चीजों में से एक है जो मुझे string name definitionपरीक्षणों में परेशान करती है ।

जब आपके पास ... हो:

def test_my_test
end

आप हमेशा जानते हैं कि आपका परीक्षण कैसे नाम दिया गया है ताकि आप इसे इस तरह से निष्पादित कर सकें:

ruby my_test -n test_my_test

लेकिन जब आपके पास कुछ ऐसा हो:

it "my test" do
end

आपको कभी भी यकीन नहीं है कि इस परीक्षा को वास्तव में आंतरिक रूप से कैसे नामित किया जाता है ताकि आप -nसीधे विकल्प का उपयोग न कर सकें।

यह जानने के लिए कि इस परीक्षण को आंतरिक रूप से कैसे नाम दिया गया है, आपके पास केवल एक विकल्प है: लॉग में देख यह पता लगाने की कोशिश करने के लिए पूरी फ़ाइल निष्पादित करें।

मेरा वर्कअराउंड (अस्थायी रूप से) परीक्षण के नाम में कुछ जोड़ने के लिए बहुत ही अनूठा है:

it "my test xxx" do
end

और फिर '-n' पैरामीटर के RegEx संस्करण का उपयोग करें जैसे:

ruby my_test.rb -n /xxx/

6
रेनेक्स संस्करण का एन पैरामीटर सूचना का क्लच टुकड़ा था, धन्यवाद!
वोहाडे

ध्यान दें कि आप __method__वर्तमान में निष्पादित विधि (आपके परीक्षण, इस उदाहरण में) के संदर्भ में कॉल करके इसकी जांच कर सकते हैं । वर्तमान कार्यान्वयन कुछ इस तरह से परिणाम देता है "does not break my stuff".gsub(" ", "_").prepend("test_")। फिर, उदाहरण के लिए, भागो ruby -Itest test/integration/stuff_flow_test.rb --name test_does_not_break_my_stuff
TK-421

33

यदि आप मिनीटेस्ट का उपयोग रेल के साथ 5+ कर रहे हैं तो एकल फ़ाइल में सभी परीक्षण चलाने का सबसे अच्छा तरीका है:

bin/rails test path/to/test_file.rb

और एक परीक्षण के लिए (जैसे लाइन 25 पर):

bin/rails test path/to/test_file.rb:25

Http://guides.rubyonrails.org/testing.html#the-rails-test-runner देखें


23

आप एकल फ़ाइल चलाने के लिए इसका उपयोग कर सकते हैं:

rake test TEST=test/path/to/file.rb

मैंने भी इस्तेमाल किया

ruby -I"lib:test" test/path/to/file.rb

बेहतर प्रदर्शन के लिए।


12

इसे करने के 2 तरीके हैं:

  1. 'मैन्युअल रूप से' परीक्षण चलाएं (एंड्रयू ग्रिम का जवाब देखें)।
  2. Rake::TestTaskएक अलग परीक्षण लोडर का उपयोग करने के लिए हैक लक्ष्य।

Rake::TestTask(रेक से 0.8.7) सैद्धांतिक रूप से अतिरिक्त विकल्पों को पास करने में सक्षम MiniTest::Unitहै"TESTOPTS=blah-blah" कमांड लाइन विकल्प के , उदाहरण के लिए:

% रेक टेस्ट TEST = test / test_foobar.rb TESTOPTS = "- name test_foobar1 -v"

अभ्यास में, विकल्प --name(परीक्षण नामों के लिए एक फिल्टर) काम नहीं करेगा, रेक इंटर्नल के कारण। यह तय करने के लिए कि आपको अपने राकफाइल में एक छोटा बंदर पैच लिखना होगा:

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

इस पैच को आपको एक फ़ाइल बनाने की आवश्यकता है test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

Minitest के सभी संभावित विकल्पों को प्रिंट करने के लिए, टाइप करें

% रूबी -r मिनिटेस्ट / ऑटोरन -''-help

3
ध्यान दें कि प्रारंभिक उदाहरण अधिक हाल ही में rake(0.9.2) के साथ सही ढंग से काम करता है और बंदर के पैच की आवश्यकता नहीं होती है।
कन्फ्यूजन

1
जब मैंने रेक संस्करण 10.5.0 के साथ कोशिश की तो TESTOPTS="--name test_foobar"काम नहीं करता है, लेकिन TESTOPTS="--name=test_foobar"काम करता है।
कांजीव्यू

11

आप --nameउसके नाम या उसके नाम से एक संख्या द्वारा परीक्षण चलाने के लिए पास कर सकते हैं :

-n, --name PATTERN               Filter run on /regexp/ or string.

उदाहरण के लिए:

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

यह ध्वज मिनिटेस्ट की README में प्रलेखित है


1

यदि आप मिनिटेस्ट के साथ टर्न मणि का उपयोग कर रहे हैं, तो Turn.config.patternविकल्प का उपयोग करना सुनिश्चित करें क्योंकि टर्न मिनिटेस्ट रनर ARGs में --name विकल्प का सम्मान नहीं करता है।


यह संकेत था कि मुझे यह महसूस करने की आवश्यकता थी कि बारी वह है जो nameविकल्प निगल रही थी । धन्यवाद! टर्न होने के कारण अब इसे बनाए रखा नहीं जा रहा है, मैं मिनिटेस्ट-रिपोर्टरों को प्रवास करने की योजना बना रहा हूं
pdobb

1

मैं समान कार्यक्षमता की तलाश में हूं:

rspec पथ / to / test_file.rb -l 25

एक रत्न है जो ठीक यही करता है minitest-line:।

gem install minitest-line
ruby test/my_file -l 5

से https://github.com/judofyr/minitest-line#minitest-line


हाय @ क्रिस, क्या आप बता सकते हैं कि वास्तव में क्या काम नहीं कर रहा है (जैसे एक त्रुटि संदेश)? मिनीटेस्ट-लाइन रत्न का उद्देश्य केवल मिनीटेस्ट में एकल परीक्षण चलाना है। यदि यह काम नहीं कर रहा है तो आपको मिनिटेस्ट-लाइन में बग मिल सकता है।
knugie

1

मैं उपयोग करता हूं ruby /path/to/test -n /distinguishable word/

संपादित करें: के -nलिए एक आशुलिपि है --namedistinguishable wordआप परीक्षण विवरण में कोई भी स्ट्रिंग डाल सकते हैं, मैं आमतौर पर कुछ यादृच्छिक शब्द का उपयोग करता हूं जो मुझे पता है कि अन्य परीक्षणों के विवरण में मौजूद नहीं होंगे।


क्या आप आगे बता सकते हैं? उस -nपैरामीटर का क्या मतलब है?
निको हसे

यह एक आशुलिपि है --name। बस एक सुविधा की बात। / Regex / के साथ विशेष रूप से उपयोगी, मैं आमतौर पर कुछ यादृच्छिक शब्द एक परीक्षण नाम में डाल देता हूं (जो मुझे पता है कि अन्य परीक्षणों के विवरण में मौजूद नहीं होगा)।
sloneorzeszki

1
कृपया इसके बारे में कुछ स्पष्टीकरण उत्तर के लिए दें, टिप्पणी अनुभाग पर नहीं
निको हासे

0

निम्नलिखित काम करेंगे

def test_abc
end

test "hello world"
end

इससे चल सकता है

bundle exec ruby -I test path/to/test -n test_abc

bundle exec ruby -I test path/to/test -n test_hello_word

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