मोचा के साथ एक एकल परीक्षण कैसे चलाया जाए?


292

मैं अपने जावास्क्रिप्ट सामान का परीक्षण करने के लिए मोचा का उपयोग करता हूं। मेरी परीक्षण फ़ाइल में 5 परीक्षण हैं। क्या फ़ाइल में सभी परीक्षणों के बजाय एक विशिष्ट परीक्षण (या परीक्षणों का सेट) चलाना संभव है?

जवाबों:


356

मोचा के --grepविकल्प का उपयोग करके देखें :

    -g, --grep <pattern>            only run tests matching <pattern>

आप किसी भी मान्य जावास्क्रिप्ट regex का उपयोग कर सकते हैं <pattern>। उदाहरण के लिए, यदि हमारे पास test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

फिर:

$ mocha -g 'logs a'

एक परीक्षण चलाने के लिए। ध्यान दें कि यह सभी describe(name, fn)और it(name, fn)इनवोकेशन के नामों के बीच है ।

describe()नेमस्पेसिंग के लिए नेस्टेड कॉल का उपयोग करने पर विचार करें ताकि विशेष सेट का पता लगाना और चयन करना आसान हो सके।


1
धन्यवाद! मैं इस धारणा के तहत था कि --grepकेवल @टैग से फ़िल्टर किया गया था ।
कुमारहर्ष

5
मोचा प्रोग्रामेटिकली (ग्रंट से उदाहरण के लिए) का उपयोग करते समय, एक पकड़ है: grep विकल्प को एक toRegExp () program ऑब्जेक्ट होना चाहिए। यदि यह एक तार है, तो यह बच जाएगा।
h-kippo

1
यह एकमात्र समाधान है जिसने मेरे लिए काम किया। कमांड लाइन पर फाइलें निर्दिष्ट करना ( mocha some/test.js) बिल्कुल भी काम नहीं किया। धन्यवाद!
हब्रन

2
किसी भी तरीके से चलने से बचने के लिए logs a bcdजिसमें logs aप्रतिस्थापन शामिल है ? Regexp 0.10.2 ^$पर काम नहीं कर रहा है।
Ciro Santilli 郝海东 冠状 iro 事件 法轮功 ''

धन्यवाद। यदि मैं निर्देशिका को 'एम' लॉग के रूप में निर्दिष्ट नहीं करता हूं तो कुछ त्रुटियां हो सकती हैं।
काटा

167

आपके उपयोग पैटर्न के आधार पर, आप केवल उपयोग करना चाहते हैं । हम टीडीडी शैली का उपयोग करते हैं; यह इस तरह दिख रहा है:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

केवल यह परीक्षा सभी फाइलों / SUITES से चलेगी।


5
BDD वही काम करता है। यह तब बहुत अच्छा होता है जब आप एकल परीक्षण पर काम कर रहे होते हैं। इसका उपयोग सुइट / वर्णन स्तर पर भी किया जा सकता है
andyzinsser

14
चाई और उम्मीद सिंटैक्स के साथ it.only
एल्केलेक

4
यह उत्तर बेहतर है क्योंकि यह तब भी काम करेगा जब
मोच

2
it.onlyके साथ एक साथ काम नहीं करेगा givenकी मोचा-testdata । और बाद में इसे हटाने के लिए भूलना आसान है।
Tr1et

4
eslint-plugin-mochaएक नियम है no-exclusive-testsजो अगर आप को हटाने के लिए भूल जाते हैं तो आप पकड़ लेंगे .only
dostu

84

यदि आप उपयोग कर रहे हैं npm test(package.json स्क्रिप्ट का उपयोग करके) --मोचा के माध्यम से परम पारित करने के लिए एक अतिरिक्त का उपयोग करें

जैसे npm test -- --grep "my second test"

संपादित करें : ऐसा लगता है कि --grepथोड़ा उधम मचाते हैं (शायद अन्य तर्कों के आधार पर)। आप ऐसा कर सकते हैं:

Package.json को संशोधित करें:

"test:mocha": "mocha --grep \"<DealsList />\" .",

या वैकल्पिक --bailरूप से कम उधम मचाते हुए उपयोग करें

npm test -- --bail

3
मेरे लिए काम किया। धन्यवाद :)
जिल-जोन्ने वीवाई

1
@ --grep और थोड़ी सी उधम मचा सकते हैं - npm स्क्रिप्ट प्रविष्टि के भीतर मोचा के ठीक बाद डालने की कोशिश करें। वरना npm test -- --bailपहले नाकाम रहने के परीक्षण के बाद प्रति सहिष्णु के लिए उपयोगी है
एशले Coolman

1
--grepमेरे दिन को बचाने से पहले अतिरिक्त डैश पास करना ! बहुत बहुत धन्यवाद। पुनश्च। मैं विंडोज पर हूँ, चल रहा हैnpm test -- --grep @tag
Mykola

18

एकल परीक्षण चलाएं-

वास्तव में, कोई फ़ाइल नाम से एक भी मोचा परीक्षण चला सकता है (न कि केवल ./test/**/*.spec.jscan इट () - स्ट्रिंग-ग्रीपिंग ”) यदि आप अपने mocha.opts से ग्लोब पैटर्न (जैसे ) को हटाते हैं, तो क्रमशः, एक प्रतिलिपि बनाएँ, बिना:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

यहाँ मेरा mocha.single.opts है (यह उक्त ग्लोब लाइन को याद करने में केवल अलग है)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

पृष्ठभूमि: जब आप ऑप्स-फाइल से विभिन्न स्विचों को ओवरराइड कर सकते हैं (शुरुआत के साथ --) आप ग्लोब को ओवरराइड नहीं कर सकते । उस लिंक में कुछ स्पष्टीकरण भी हैं।

संकेत: यदि node_modules/.bin/mochaआप भ्रमित करते हैं, तो स्थानीय पैकेज मोचा का उपयोग करें। आप भी लिख सकते हैं mocha, अगर आपने इसे विश्व स्तर पर स्थापित किया है।


और यदि आप आराम चाहते हैं package.json: फिर भी: **/*अपने से शिश ग्लोब को हटा दें mocha.opts, उन्हें यहां डालें, सभी-परीक्षण के लिए, उन्हें एकल परीक्षण के लिए छोड़ दें:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

उपयोग:

> npm run test

क्रमश:

> npm run test-single -- test/ES6.self-test.spec.js 

(मन --!)


मेरे सेटअप में $ 1 की आवश्यकता नहीं थी, इसके बजाय, यह चेतावनी की ओर ले जाता है: Warning: Could not find any test files matching pattern: $1
मेरीजन वोगेल

15

बस 'वर्णन', 'यह' या 'संदर्भ' से पहले .only का उपयोग करें। मैं "$ npm रन टेस्ट: यूनिट" का उपयोग करके चलाता हूं, और यह केवल .only के साथ केवल इकाइयों को निष्पादित करता है।

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

हाय ऊपर समाधान मेरे लिए काम नहीं किया। एकल परीक्षण चलाने का दूसरा तरीका है

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

यह एक एकल फ़ाइल से और विशिष्ट नाम के साथ एक परीक्षण मामले को चलाने में मदद करता है।


1
एक ऐसी अभिव्यक्ति का उपयोग करें, जिसके लिए चयनात्मक पर्याप्त है -gऔर आपको फ़ाइल नाम निर्दिष्ट करने की आवश्यकता नहीं होगी। यदि आप एक अभिव्यक्ति नहीं लिख सकते हैं जो कि काफी चयनात्मक है, तो इसका मतलब है कि आप अपने परीक्षणों को ठीक से नाम नहीं दे रहे हैं।
लुई 24


8

आप "it.only" आज़मा सकते हैं

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

इसमें पहले वाला ही अमल करेगा


2
खतरनाक यदि परीक्षण --forbid-onlyसीआई / बिल्ड सर्वर पर के माध्यम से निष्पादित नहीं किए जाते हैं । .onlyमुख्य शाखा में घुसने और अन्य परीक्षणों को म्यूट करने की प्रवृत्ति है क्योंकि वे अभी निष्पादित नहीं करेंगे। मुझे विभिन्न परीक्षणों को एक एंटी-फीचर चलाने के लिए कोड बदलने के वर्कफ़्लो के बारे में सोचना पड़ा। परीक्षण धावक को यह निर्धारित करना चाहिए कि कौन से परीक्षण निष्पादित किए जाने चाहिए (उर्फ टैग किए गए परीक्षण) डेवलपर नहीं।
k0pernikus

मैंने अपने स्थानीय में एक कार्यक्षमता का परीक्षण करने के लिए इसका उपयोग किया है, नोट: it.onlyरेपो के साथ कोड प्रतिबद्ध न करें
बीकेश एम

5

जांच कर रहे https://mochajs.org/#usage हम कि बस उपयोग देख

मोचा टेस्ट / मायफाइल

काम करेगा। आप अंत में '.js' को छोड़ सकते हैं।


0

निश्चित नहीं है कि एनपीएम टेस्ट का उपयोग करते समय ग्रीप विधि मेरे लिए काम क्यों नहीं कर रही है। हालांकि यह काम करता है। मुझे किसी कारण से परीक्षण फ़ोल्डर को भी निर्दिष्ट करने की आवश्यकता है।

npm परीक्षण - परीक्षण / someest.js


0

अपने सभी परीक्षणों को एक test.js फ़ाइल में समेकित करें और आपका पैकेज json स्क्रिप्ट जोड़ें:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

अपने परीक्षण निर्देशिका पर कमांड टाइप करें:

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