मोचा के लिए परीक्षण निर्देशिका कैसे निर्दिष्ट करें?


219

मोचाtest डिफ़ॉल्ट रूप से परीक्षण फ़ाइलों को खोजने की कोशिश करता है , मैं एक और डीआईआर कैसे निर्दिष्ट कर सकता हूं, जैसे server-test?


आपके प्रश्न का 100% उत्तर न देते हुए, jaketrent.com/post/run-single-mocha-test देखें - मैं यहां आया था कि कैसे एक विशिष्ट टेस्ट सूट चलाना है और यह आपको दिखाता है कि आप किन परीक्षणों का उपयोग कर सकते हैं .onlyऔर .skipप्रबंधित कर सकते हैं दौड़ रहे है। एक विशिष्ट विशेषता के विकास के दौरान महत्वपूर्ण है जब आप पूरे समय चलने के लिए पूरे परीक्षण सूट की प्रतीक्षा नहीं करना चाहते हैं।
डेव सग

जवाबों:


141

संपादित करें: यह विकल्प हटा दिया गया है: https://mochajs.org/#mochaopts


यदि आप इसे अभी भी केवल mochaकमांड लाइन पर चलकर करना चाहते हैं, लेकिन ./server-testsइसके बजाय फ़ोल्डर में परीक्षण चलाना चाहते हैं ./test, तो फ़ाइल में ./test/mocha.optsबस इसके साथ एक फ़ाइल बनाएं :

server-tests

यदि आप उस फ़ोल्डर और उपनिर्देशिकाओं में सब कुछ चलाना चाहते हैं, तो इसे डालें test/mocha.opts

server-tests
--recursive

mocha.opts कमांड लाइन के माध्यम से तर्क पारित किए जाते हैं, इसलिए पहली पंक्ति को केवल निर्देशिका बनाने के लिए जो आप परीक्षण बदलना चाहते हैं वह भी पुनर्निर्देशित करेगा ./test/


12
यह कम से कम घर्षण वाला विकल्प है, और
निक टॉमलिन

मैं बॉयलर प्लेट में से एक का उपयोग कर रहा हूं और यह निम्न पंक्ति में है, विंडोज़ के कारण हो सकता है, क्या आप एक बार चेक कर सकते हैं। कृपया ./ode_modules/mocha/bin/mocha $ (api -name '* -test.js' खोजें) - माइक्रोमैक्स जेएस: बेबल-कोर / रजिस्टर
कोबे

1
एक मणि, वेबस्टॉर्म आईडीई मोचा डिबग कॉन्फ़िगरेशन के साथ अच्छी तरह से खेलता है, बस "फ़ाइल पैटर्न" का चयन करें और इनपुट को खाली छोड़ दें, और यह 5:13 बजे mocha.opts
danday74

3
यह सुनिश्चित करने के लिए सबसे अच्छा जवाब है। संभवत: आपके उत्तर में यह जोड़ना भी उचित होगा कि mocha.optsफ़ाइल को आप जहाँ चाहें वहाँ रख सकते हैं, और फिर mochaउदाहरण के लिए इसके विन्यास फाइल के लिए पथ निर्दिष्ट करने पर अमल करें :mocha --opts ./mocha.opts
quirimmo

1
आप भी सिर्फ अगर आप अपने package.json में परीक्षण स्क्रिप्ट को परिभाषित मोचा कमांड लाइन में --recursive डाल सकता है, उपयोगी
unludo

282

इसे इस्तेमाल करो:

mocha server-test

या यदि आपके पास उपनिर्देशिका है तो इसका उपयोग करें:

mocha "server-test/**/*.js"

दोहरे उद्धरण चिह्नों के उपयोग पर ध्यान दें। यदि आप उन्हें छोड़ देते हैं तो आप उपनिर्देशिकाओं में परीक्षण चलाने में सक्षम नहीं हो सकते हैं।


1
यह मेरे लिए काम नहीं करता है। अगर मैं इसे इस तरह से करना चाहता हूं तो मुझे करना हैmocha test/server-test
जॉनी

22
डबल कोट्स का मुद्दा मेरे पास उम्र भर के लिए था! मेरी पवित्रता को बचाने के लिए धन्यवाद। उन दोहरे उद्धरण चिह्नों का अतिरिक्त ध्यान देने के लिए इसे पढ़ते हुए सभी को चिल्लाएं।
ctrlplusb

11
मेरे मामले में, मैं उपयोग कर रहा था mocha ./**/*.test.js(इसलिए मैं मॉड्यूल फ़ाइल के साथ परीक्षण फ़ाइल को कोलॉकेट कर सकता हूं)। पैटर्न ने मेरे लिए काम करना बंद कर दिया जब मैंने बाकी परीक्षणों की तुलना में फ़ाइल पदानुक्रम में एक अलग स्तर पर एक परीक्षण फ़ाइल जोड़ दी, और केवल एक अजीब गेंद फ़ाइल और दर्जनों नहीं मिलेंगे जो पदानुक्रम में एक ही स्तर पर रहते थे। । उद्धरणों में लपेटकर इसे ठीक किया।
स्टूटी

1
या --recursiveनीचे बताए अनुसार उपयोग करें
जेफ डिके

4
इसका उत्तर होना चाहिए! दोहरे उद्धरण मुझे बचाते हैं
मिन्ह थाई

81

यहाँ एक तरीका है, यदि आपके पास आपके परीक्षण फ़ोल्डर में सबफ़ोल्डर हैं उदा

/test
/test/server-test
/test/other-test

फिर linux में आप सभी * .js फ़ाइलों को पुन: सूचीबद्ध करने के लिए फ़ाइंड कमांड का उपयोग कर सकते हैं और इसे mocha में पास कर सकते हैं:

mocha $(find test -name '*.js')

29
या --recursiveनीचे बताए अनुसार उपयोग करें
जेफ डिके

5
तो दूसरे शब्दों mochaमें विन्यास में वांछित निर्देशिका संरचना निर्धारित करने का कोई विकल्प नहीं है?
ग्रीन

ग्राहक उपयोगकर्ता $ mocha $ (परीक्षण खोजें -'''js 'खोजें) -बश: मोचा: कमांड नहीं मिला; यह त्रुटि हो रही है।
lft93ryt

1
यह बहुत जटिल और भ्रामक है। OS कमांड का उपयोग करने के बजाय मोचा विकल्पों को प्राथमिकता दें।
माइकल बुशी

आपकी पोस्ट सवाल का जवाब नहीं देती है
ekkis

30

ऐसा करने का अच्छा तरीका यह है कि पैकेज में एक "टेस्ट" एनपीएम स्क्रिप्ट जोड़ें। इसे सही तर्क के साथ मोचा कहते हैं। इस तरह आपका पैकेज.जसन आपके टेस्ट स्ट्रक्चर का भी वर्णन करता है। यह इन सभी क्रॉस-प्लेटफ़ॉर्म मुद्दों को अन्य उत्तरों (दोहरे बनाम एकल उद्धरण, "ढूंढें", आदि) से भी बचाता है।

"परीक्षण" निर्देशिका में सभी js फ़ाइलों को चलाने के लिए मोचा:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

फिर केवल स्मोक टेस्ट कॉल चलाने के लिए:

npm test

आप इस तरह से सभी परियोजनाओं में सभी परीक्षणों को चलाने का मानकीकरण कर सकते हैं, इसलिए जब कोई नया डेवलपर आपकी परियोजना या किसी अन्य पर शुरू होता है, तो वे जानते हैं कि "npm परीक्षण" परीक्षण चलाएगा। इसके लिए अच्छी ऐतिहासिक मिसाल है (मावेन, उदाहरण के लिए, अधिकांश पुराने स्कूल "प्रोजेक्ट" भी बनाते हैं)। यह सुनिश्चित करता है कि सीआई को मदद मिलती है जब सभी परियोजनाओं में एक ही टेस्ट कमांड होती है।

इसी तरह, आपके पास तेज "धुआं" परीक्षण का एक उपसमुच्चय हो सकता है जिसे आप मोचा चलाना चाहते हैं:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

फिर केवल स्मोक टेस्ट कॉल चलाने के लिए:

npm smoketest

एक अन्य सामान्य पैटर्न यह है कि वे अपने परीक्षण को उसी निर्देशिका में रखें जिस स्रोत का वे परीक्षण करते हैं, लेकिन परीक्षण फ़ाइलों को * .spec.js कहते हैं। उदाहरण के लिए: src / foo / foo.js का परीक्षण src / foo / foo.spec.js द्वारा किया जाता है।

अधिवेशन द्वारा * .spec.js नाम की सभी परीक्षाएँ चलाने के लिए:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

फिर सभी परीक्षण कॉल चलाने के लिए:

npm test

यहाँ पैटर्न देखें? अच्छा। :) संगति हार mura


यह मुझे लगता है कि ऐसा करने का सबसे सटीक तरीका है।
आर्टूरस

29

-G या --grep विकल्प का उपयोग न करें, यह पैटर्न इसके अंदर परीक्षण के नाम पर संचालित होता है (), फाइलसिस्टम नहीं। वर्तमान प्रलेखन भ्रामक है और / या इसके विषय में गलत है। संपूर्ण सिस्टम को फाइलसिस्टम के एक हिस्से तक सीमित करने के लिए, आप एक पैटर्न को अंतिम तर्क के रूप में पारित कर सकते हैं (इसका ध्वज नहीं)।

उदाहरण के लिए, यह कमांड आपके रिपोर्टर को कल्पना के लिए सेट करेगा लेकिन केवल सर्वर-परीक्षण निर्देशिका के अंदर तुरंत js फाइलों का परीक्षण करेगा:

mocha --reporter spec server-test/*.js

यह कमांड ऊपर की तरह ही होगा, साथ ही यह केवल उन परीक्षण मामलों को चलाएगा जहां परीक्षण (") की स्ट्रिंग / परिभाषा" Fnord: "से शुरू होती है:

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

यदि नोड.जेएस में , मोचा v6 के रूप में कुछ नए विन्यास :

विकल्प 1: .mocharc.jsonप्रोजेक्ट की मूल निर्देशिका बनाएं :

{
  "spec": "path/to/test/files"
}

विकल्प 2: mochaपरियोजना में संपत्ति जोड़ें package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

अधिक विकल्प यहाँ हैं


20

test_directoryउप-निर्देशिकाओं में सभी फ़ाइलें चलाएं जो मेल खाते होंtest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

या --recursiveस्विच का उपयोग करें

mocha --recursive test_directory/

11

मुझे अभी यह समस्या थी और इसे हल करके --recursive(जो मैंने सेट किया था) और ऊपर बताए गए ढांचे का उपयोग करके हल किया :

mochify "test/unit/**/*.js"

इसने सभी निर्देशिकाओं में सभी परीक्षणों को /test/unit/मेरे भीतर चलाया जबकि अन्य निर्देशिकाओं को अनदेखा किया/test/


9

अब एक दिन (वर्ष 2020) आप मोचा कॉन्फ़िगरेशन फ़ाइल का उपयोग करके इसे संभाल सकते हैं :

चरण 1: अपने आवेदन के मूल स्थान पर .mocharc.js फ़ाइल बनाएँ

चरण 2: मोचा विन्यास फाइल में नीचे कोड जोड़ें :

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};

Config फाइल में अधिक विकल्प के लिए इस लिंक को देखें: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js


3

मैं विंडोज 7 पर नोड.जेएस v0.10.0 और मोचा v1.8.2 और एनपीएम v1.2.14 का उपयोग कर रहा हूं। मैं सिर्फ अपने परीक्षण को खोजने के लिए पथ परीक्षण / इकाई का उपयोग करने के लिए मोचा प्राप्त करने की कोशिश कर रहा था, लंबे समय तक खर्च करने और कई चीजों को आज़माने के बाद,

"परीक्षण / इकाई / *। Js" विकल्प का उपयोग करना विंडोज़ पर काम नहीं करता है। अच्छे कारणों के लिए कि विंडोज़ शेल वाइल्डकार्ड जैसे कि अनिक्सन का विस्तार नहीं करता है।

हालांकि "परीक्षण / इकाई" का उपयोग फ़ाइल पैटर्न के बिना काम करता है। जैसे। "मोचा टेस्ट / यूनिट" टेस्ट / यूनिट फ़ोल्डर में पाई गई सभी फाइलों को चलाता है।

यह केवल एक फ़ोल्डर फ़ाइलों को परीक्षण के रूप में चलाता है, लेकिन आप कई निर्देशिका नामों को मापदंडों के रूप में पारित कर सकते हैं।

एकल परीक्षण फ़ाइल चलाने के लिए आप पूर्ण पथ और फ़ाइल नाम निर्दिष्ट कर सकते हैं। जैसे। "मोचा टेस्ट / यूनिट / mytest1.js"

मैं वास्तव में npm "स्क्रिप्ट" के लिए package.json में सेटअप करता हूं: {"टेस्ट": "मोचा टेस्ट / यूनिट"},

ताकि 'एनपीएम टेस्ट' मेरी यूनिट टेस्ट चलाए।


11
आज के अनुसार, कोई भी --recursiveनिम्न की तरह विकल्प का उपयोग कर सकता है :mocha --recursive "some_dir"
सुपरजोस

3
का उपयोग करते हुए node_modules\.bin\mocha "test\unit\*.js"विंडोज पर काम करता है। भी node_modules\.bin\mocha "**\*.js"काम करता है (मेरा असली मामला)। लेकिन मैं node_modules निर्देशिका को बाहर करने का एक तरीका ढूंढ रहा हूं । (मैं भी gulpfile.js का उपयोग करता हूं, लेकिन कभी-कभी मुझे सीधे मोचा के साथ परीक्षण शुरू करने की आवश्यकता होती है)
एलेक्स 75

3

यदि आप उपयोग कर रहे हैं nodejs, आपके package.jsonअंडर मेंscripts

  1. के लिए global (-g)प्रतिष्ठानों: "test": "mocha server-test"या "test": "mocha server-test/**/*.js"सहायक दस्तावेज़ों के लिए
  2. के लिए projectप्रतिष्ठानों: "test": "node_modules/mocha/bin/mocha server-test"या "test": "node_modules/mocha/bin/mocha server-test/**/*.js"सहायक दस्तावेज़ों के लिए

तो बस अपने परीक्षणों को सामान्य रूप से चलाएं npm test


मुझे लगता है कि npm run mocha "./test/*.spec.js!(~)"ग्लोब तर्क की अनदेखी कर रहा है, लेकिन node_modules/.bin/mocha "./test/*.spec.js!(~)"नहीं करता है।
लोहाछी

@ironchicken को "npm run" उपयोग से तर्क देने के लिए - जैसेnpm run mocha -- yourArgs
पेड्रो A

3

जैसा कि टिप्पणियों में @superjos द्वारा उपयोग किया गया है

mocha --recursive "some_dir"


2

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


2

जैसा कि @ jeff-Dickey ने सुझाव दिया है, अपनी परियोजना की जड़ में, नामक एक फ़ोल्डर बनाएं test। उस फोल्डर में, नामक एक फाइल बनाते हैंmocha.opts । अब जहां मैं जेफ के जवाब में सुधार करने की कोशिश करता हूं, मेरे लिए जो काम किया, वह सिर्फ एक टेस्ट फ़ोल्डर के नाम को निर्दिष्ट करने के बजाय, मैंने इस लाइन को जोड़कर अपने प्रोजेक्ट में चलने के लिए सभी परीक्षणों को खोजने के लिए एक पैटर्न निर्दिष्ट किया:

*/tests/*.js --recursive में mocha.opts

यदि आप इसके बजाय परीक्षण के लिए सटीक फ़ोल्डर निर्दिष्ट करना चाहते हैं, तो मैंने ऐसा कुछ किया:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

मुझे उम्मीद है कि यह किसी को भी मदद करता है जिसे अन्य उत्तर प्रदान करने की तुलना में अधिक आवश्यकता होती है

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