मोचा के लिए डिफ़ॉल्ट टाइमआउट बदलें


161

अगर हमारे पास एक यूनिट टेस्ट फाइल my-spec.js है और मोचा के साथ चल रहा है:

mocha my-spec.js

डिफ़ॉल्ट टाइमआउट 2000 एमएस होगा। इसे कमांड लाइन पैरामीटर के साथ आंशिक परीक्षण के लिए अधिलेखित किया जा सकता है:

mocha my-spec.js --timeout 5000

क्या सभी परीक्षणों के लिए विश्व स्तर पर डिफ़ॉल्ट टाइमआउट को बदलना संभव है? जब आप कॉल करते हैं तो डिफ़ॉल्ट टाइमआउट मान 2000 एमएस से अलग होगा:

mocha my-spec.js

मोचा की आधिकारिक वेबसाइट भी इस पर अधिक बताती है।
रविरोकम्

जवाबों:


305

डिफ़ॉल्ट रूप से मोचा एक फाइल पढ़ेगा जिसका नाम test/mocha.optsकमांड लाइन आर्ग्युमेंट हो सकता है। तो आप ऐसी फ़ाइल बना सकते हैं जिसमें शामिल हैं:

--timeout 5000

जब भी आप कमांड लाइन पर मोचा चलाते हैं, यह इस फाइल को पढ़ेगा और डिफ़ॉल्ट रूप से 5 सेकंड का समय निर्धारित करेगा।

एक और तरीका जो आपकी स्थिति के आधार पर बेहतर हो सकता है, वह यह है कि इसे describeअपनी परीक्षण फ़ाइल में शीर्ष स्तर की कॉल में सेट करें:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

यह आपको केवल प्रति-फ़ाइल के आधार पर टाइमआउट सेट करने की अनुमति देगा।

यदि आप 5000 का वैश्विक डिफ़ॉल्ट चाहते हैं, तो आप दोनों विधियों का उपयोग कर सकते हैं, लेकिन कुछ फ़ाइलों के लिए कुछ अलग सेट कर सकते हैं।


ध्यान दें कि यदि आप कॉल करने जा रहे हैं this.timeout(या thisआपके लिए उस मोचा सेट के किसी अन्य सदस्य तक पहुंच सकते हैं) तो आप आमतौर पर एक तीर फ़ंक्शन का उपयोग नहीं कर सकते हैं । उदाहरण के लिए, यह आमतौर पर काम नहीं करेगा :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

ऐसा इसलिए होता है क्योंकि thisफ़ंक्शन दिखाई देने वाले स्कोप से एक एरो फंक्शन लेता है। मोचा फंक्शन को एक अच्छे मान के साथ कॉल करेगा, thisलेकिन एरो फंक्शन के अंदर वह वैल्यू पास नहीं होगी। इस विषय पर मोचा का प्रलेखन कहता है :

मोचा के लिए तीर कार्य ("लंबदा") पास करना हतोत्साहित किया जाता है। इस के शाब्दिक बंधन के कारण, ऐसे कार्य मोचा संदर्भ तक पहुंचने में असमर्थ हैं।


1
जानकारी के लिए धन्यवाद। लेकिन मैंने mocha.opts फ़ाइल को संशोधित करने का प्रयास किया, लेकिन यह प्रभावित नहीं करता है।
एल.एम.

2
क्या आपने इसे सही जगह बनाया है? मोचा इस फ़ाइल को कहाँ चाहता है, इसके बारे में बहुत विशिष्ट है। यदि आप मोचा चलाते हैं /home/me/src/proj/तो मोचा इस फाइल को खोजने जा रहा है:/home/me/src/proj/test/mocha.opts
लुई

बहुत बहुत धन्यवाद । अब परिवर्तन प्रभावित
एल.एम.

this.timeout (10000); // default timeout ^ TypeError: this.timeout एक फंक्शन ऑन सूट नहीं है। <अनाम> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests-checkoutTest.js:12:10)
Jeff लोवी

6
@JeffLowery आप एक तीर फ़ंक्शन का उपयोग कर रहे हैं? एरो फ़ंक्शंस एक नया स्थापित नहीं करते हैं this, जिसके परिणामस्वरूप आमतौर पर this.timeoutआप अपनी टिप्पणी में दिखाते हैं जैसे आप असफल होते हैं।
लुई

62

बस सही उत्तर को जोड़कर आप इस तरह से तीर फ़ंक्शन के साथ टाइमआउट सेट कर सकते हैं:

it('Some test', () => {

}).timeout(5000)

7
सवाल "सभी परीक्षणों के लिए विश्व स्तर पर डिफ़ॉल्ट टाइमआउट को बदलने के लिए" है। आपका उत्तर केवल एक परीक्षा को बदलता है। describe('suite', () => {...}).timeout(5000)काम नहीं करता है।
एलेउंग

पिछले उत्तर की तरह, वर्तमान में प्रस्तावित समाधान अप्रभावी है। mochajs.org/#timeoutssetTimeout परीक्षणों के अंदर स्पष्ट निर्देश डालने के लिए कहता है ।
मार्को फॉस्टिनेली

इसने मेरे लिए mocha @ 5 (एक विशिष्ट परीक्षण के लिए) के साथ काम किया
फर्नांडो गेब्रियल

@MarcoFaustinelli आप डॉक्स को गलत समझ रहे हैं। मोहरा के साथ सेटटाइमआउट का कोई लेना-देना नहीं है। वे टाइमआउट सेटिंग्स के प्रभावों को प्रदर्शित करने के लिए वहां हैं।
ऑलिगॉफ्रेन

33

इसे पूर्णता के लिए जोड़ना। यदि आप (मेरी तरह) अपनी package.jsonफ़ाइल में स्क्रिप्ट का उपयोग करते हैं, तो केवल --timeoutमोचा का विकल्प जोड़ें :

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

फिर आप npm run testअपने परीक्षण सूट को 10,000 मिलीसेकेंड के टाइमआउट के साथ चला सकते हैं ।


यदि कोई दिलचस्पी रखता है, तो अधिकांश आईडीई आपको परीक्षण निष्पादन के लिए मोचा विकल्पों को इंजेक्ट करने की अनुमति देते हैं; उदाहरण के लिए, WebStorm के लिए, आप रन-> एडिट कॉन्फ़िगरेशन-> अतिरिक्त मोचा विकल्प के तहत (यानी "- 10000") दर्ज कर सकते हैं।
रुबिकन

25

मोचा के वर्तमान संस्करणों में, टाइमआउट को विश्व स्तर पर इस तरह बदला जा सकता है:

mocha.timeout(5000);

बस अपने परीक्षण सूट में कहीं भी ऊपर लाइन जोड़ें, अधिमानतः अपने कल्पना के शीर्ष पर या एक अलग परीक्षण सहायक में।


पुराने संस्करणों में, और केवल एक ब्राउज़र में, आप वैश्विक कॉन्फ़िगरेशन का उपयोग करके बदल सकते हैं mocha.setup

mocha.setup({ timeout: 5000 });

प्रलेखन वैश्विक टाइमआउट सेटिंग को कवर नहीं करता है, लेकिन प्रस्तावों कैसे अन्य सामान्य परिदृश्य में समयबाह्य बदलने के लिए पर कुछ उदाहरण।


5
यह नोड में काम नहीं करता है। Stackoverflow.com/a/47915119/893113 देखें । ऐसा लगता है कि CLI विकल्प ही एकमात्र तरीका है।
पौलमेलनिकोव

मैं ब्राउज़र में भी काम नहीं करता। आज तक, उत्तर में जुड़े प्रलेखन में किसी भी timeoutपैरामीटर का उल्लेख नहीं है। इसके विपरीत, mochajs.org/#timeoutssetTimeout परीक्षणों के अंदर स्पष्ट निर्देश डालने के लिए कहता है ।
मार्को फॉस्टिनेली

@MarcoFaustinelli आप डॉक्स को गलत समझ रहे हैं। मोहरा के साथ सेटटाइमआउट का कोई लेना-देना नहीं है। वे टाइमआउट सेटिंग्स के प्रभावों को प्रदर्शित करने के लिए वहां हैं।
ऑलिगॉफ्रेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.