मैं चमेली-नोड async कल्पना पर टाइमआउट कैसे बदल सकता हूं


88

मैं रनर / वेट्सफोर ब्लॉक्स का सहारा लिए बिना यह परीक्षा कैसे पास कर सकता हूं?

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){

         expect(body).toEqual("hello world");

         done();
     });
});

जवाबों:


104

आप (अब) सीधे जैस्मीन डॉक्स के अनुसार इसे कल्पना में सेट कर सकते हैं ।

describe("long asynchronous specs", function() {

    var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

    it("takes a long time", function(done) {
        setTimeout(function() {
            done();
        }, 9000);
    });

    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});

हाँ, बदलते jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;मूल्य ने जैस्मिन + जेस्ट का उपयोग करके खरोंच से निर्मित एक नए सेटअप पर मेरे लिए चाल चली। यह उम्मीद के मुताबिक काम करता है।
इग्नासियो सेगुरा

मैं मानता हूं कि @willydee, मेग्नेटिक के साथ रननिग टेस्ट जारी करता था और यह थोड़ा स्निपेट मेरे बचाव में आया था।
देव योगो


43

वैश्विक जैस्मीन-नोड टाइमआउट सेट करने के लिए, यह करें:

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

README डॉक्टर में गलत सूचना के बावजूद डिबगिंग के माध्यम से .getEnv () भाग का पता लगाने के लिए डेवलपर गैबी हिक्स को क्रेडिट जो दावा है उसके jasmine.DEFAULT_TIMEOUT_INTERVAL की स्थापना द्वारा किया जाता है।

यदि आप केवल एक () के लिए कस्टम टाइमआउट सेट करना चाहते हैं, तो आप टाइमआउट (मिलीसेकंड) को तीसरे तर्क (स्ट्रिंग स्टेटमेंट और फ़ंक्शन के बाद) के रूप में पारित करने का प्रयास कर सकते हैं। इसका एक उदाहरण यहां दिया जा रहा है , लेकिन मुझे यकीन नहीं है कि अगर जैस्मिन के डिफ़ॉल्ट से कस्टम टाइमआउट लंबा होता तो क्या होता। मुझे उम्मीद है कि यह विफल होगा।


28
2014 में इस जवाब पर ठोकर खाने वाले किसी भी व्यक्ति के लिए अपडेट: जैस्मीन 2 सेटिंग के लिए jasmine.DEFAULT_TIMEOUT_INTERSAL काम करता है।
साइमन ग्रोएनवोल्ट

2
यह जेस्ट + जैस्मीन का उपयोग करके मेरे लिए एक नए सेटअप पर काम करता है। मैंने अभी-अभी jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;एक वैश्विक कॉन्फ़िग फ़ाइल पर जोड़ा है जिसका उपयोग मैं सभी परीक्षणों के लिए करता हूँ और यह अपेक्षित रूप से काम करता है।
इग्नासियो सेगुरा

22

ऐसा लगता है कि अब आप इसे itफ़ंक्शन के अंतिम तर्क के रूप में जोड़ सकते हैं :

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

11

कोणीय में, इसे अपने वर्णन ब्लॉक के बाहर रखें:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

यह .spec.ts फ़ाइल के सभी परीक्षणों पर लागू होता है




1

क्यों नहीं जासूसी करके setTimeout() ?

कुछ इस तरह:

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

1
धन्यवाद। ये एकीकरण परीक्षण हैं, नोड.जेएस एक बाहरी सेवा को कॉल कर रहा है जो अक्सर धीमा होता है।
ब्रायन लो

यह शानदार है, यह वास्तविक समय के लिए परीक्षण की प्रतीक्षा किए बिना टाइमआउट का परीक्षण करना संभव बनाता है
गिलोय

इस फैशन में हम समय बीतने का अभ्यास नहीं करते हैं, और fn को तुरंत बुलाते हैं, जबकि मूल इसे अगले चक्र से पहले कभी नहीं कहता है।
आंद्रे वेरलांग

0

मेरे मामले में मेरे पास कई परीक्षण मामले थे और जब मैं उपरोक्त समाधान का उपयोग कर रहा था, तो निम्नलिखित का उपयोग कर रहा था:

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

पहले परीक्षण मामले में DEFAULT_TIMEOUT_INTERVAL अपडेट नहीं हुआ था, इसलिए मुझे इसे जोड़ना पड़ा:

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

मेरे कोड को सफलतापूर्वक सभी परीक्षण चलाने के लिए।


-16

निम्नलिखित फ़ाइल में j $ .DEFAULT_TIMEOUT_INTERVAL को 10000 में बदलें: npm \ node_modules \ jasmine-core \ lib \ jasmine-core


उन परिदृश्यों के लिए फलदायी नहीं है जहां पुस्तकालयों को स्थापित करने के लिए हर बार परीक्षण चलाया जाता है। Ex: - क्लाउड पर CI चल रहा है।
डोमिनोज़_कात्रिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.