Sinon.JS 7 - Fake timers

नकली टाइमर




sinon

नकली टाइमर

नकली टाइमर सेट टाइमआउट और दोस्तों के तुल्यकालिक कार्यान्वयन हैं जो कि Sinon.JS वैश्विक कार्यों को अधिलेखित कर सकते हैं ताकि आप उनका उपयोग करके आसानी से कोड का परीक्षण कर सकें।

नकली टाइमर समय पास करने के लिए एक clock वस्तु प्रदान करते हैं, जिसका उपयोग या तो new Date(); के माध्यम से बनाई गई Date ऑब्जेक्ट को नियंत्रित करने के लिए भी किया जा सकता है new Date(); or Date.now(); (यदि ब्राउज़र द्वारा समर्थित है)।

नकली टाइमर के स्टैंडअलोन उपयोग के लिए इसके बजाय lolex पैकेज का उपयोग करने की सिफारिश की जाती है। यह सुविधाओं का एक ही सेट प्रदान करता है (सिनॉन हुड के तहत इसका उपयोग करता है) और इसे पहले सिनोन.जेएस से निकाला गया था।

{
    setUp: function () {
        this.clock = sinon.useFakeTimers();
    },

    tearDown: function () {
        this.clock.restore();
    },

    "test should animate element over 500ms" : function(){
        var el = jQuery("<div></div>");
        el.appendTo(document.body);

        el.animate({ height: "200px", width: "200px" });
        this.clock.tick(510);

        assertEquals("200px", el.css("height"));
        assertEquals("200px", el.css("width"));
    }
}

नकली टाइमर एपीआई

var clock = sinon.useFakeTimers();

वैश्विक clearInterval , setImmediate clearInterval , setImmediate , clearImmediate , clearInterval , setImmediate , clearImmediate , performance.now (जब उपलब्ध हो) और Date को एक कस्टम clearInterval बदलने के लिए clearInterval कारण setImmediate जो लौटी हुई clock ऑब्जेक्ट से जुड़ा होता है।

UNIX युग में घड़ी की शुरुआत ( 0 टाइमस्टैम्प)।

var clock = sinon.useFakeTimers(now);

ऊपर के रूप में, लेकिन घड़ी को 0 के टाइमस्टैम्प से शुरू करने के बजाय, now दिए गए टाइमस्टैम्प पर शुरू करें।

चूंकि [email protected]

आप एक दिनांक ऑब्जेक्ट में भी पास कर सकते हैं, और इसके getTime() का उपयोग शुरुआती टाइमस्टैम्प के लिए किया जाएगा।

var clock = sinon.useFakeTimers(config);

जैसा कि ऊपर है, लेकिन आगे के विन्यास विकल्पों की अनुमति देता है, जिनमें से कुछ हैं:

  • config.now - संख्या / तिथि - निर्दिष्ट यूनिक्स युग के साथ lolex स्थापित करता है (डिफ़ॉल्ट: 0)
  • config.toFake - स्ट्रिंग [] - एक फ़ंक्शन जिसमें स्पष्ट फ़ंक्शन नाम नकली हैं। डिफ़ॉल्ट lolex स्वचालित रूप से process.nextTick को छोड़कर सभी तरीकों को नकली करेगा। आप इसे स्पष्ट रूप से प्रदान करके, हालांकि, अभी भी नकली कर सकते हैं
  • config.shouldAdvanceTime - बूलियन - वास्तविक सिस्टम टाइम शिफ्ट (डिफ़ॉल्ट: गलत) के आधार पर स्वचालित रूप से बढ़े हुए समय को बढ़ा-चढ़ा कर बताता है।

कृपया पूर्ण सुविधा सेट के लिए lolex.install documentation देखें।

महत्वपूर्ण नोट: जब nextTick , सामान्य कॉल करने के लिए process.nextTick() स्वचालित रूप से निष्पादित नहीं करेगा क्योंकि वे सामान्य इवेंट-लूप चरणों के दौरान होंगे। आपको या तो clock.next() , clock.tick() , clock.runAll() या clock.runToLast() (नीचे उदाहरण देखें) को कॉल करना होगा। कृपया अधिक जानकारी के लिए lolex दस्तावेज़ का संदर्भ लें।

उदाहरण

1 जनवरी 2017 को नकली टाइमर स्थापित करता है और सेट setTimeout और process.nextTick केवल setTimeout :

var clock = sinon.useFakeTimers({
                now: 1483228800000,
                toFake: ["setTimeout", "nextTick"]
            });

var called = false;

process.nextTick(function () {
    called = true;
});

clock.runAll(); //forces nextTick calls to flush synchronously
assert(called); //true

उसी तिथि पर स्थापित करें, नकली समय को स्वचालित रूप से आगे 20ms (डिफ़ॉल्ट प्रत्येक 20ms ), जिससे घड़ी को tick() करने की आवश्यकता के बिना स्वचालित रूप से निकाल दिया जाएगा।

var clock = sinon.useFakeTimers({
                now: 1483228800000,
                shouldAdvanceTime: true
            });

setImmediate(function () {
    console.log('tick'); //will print after 20ms
});

setTimeout(function () {
    console.log('tock'); //will print after 20ms
}, 15);

setTimeout(function () {
    console.log('tack'); //will print after 40ms
}, 35);

उपलब्ध सुविधाओं और अधिक विस्तृत विवरणों के पूर्ण सेट के लिए कृपया lolex.install documentation देखें।

चूंकि [email protected]

var clock = sinon.useFakeTimers([now, ]prop1, prop2, ...) अब समर्थित नहीं है। परिभाषित करने के लिए कि कौन से तरीके नकली हैं, कृपया config.toFake उपयोग config.toFake

clock.tick(time);

घड़ी को time पहले मिलाएं।

प्रभावित समय सीमा के भीतर निर्धारित की गई सभी समय सारणियों को कहा जाएगा। time घड़ी के आधार पर या मानव-पठनीय स्ट्रिंग द्वारा अग्रिम करने के लिए मिलीसेकंड की संख्या हो सकती है। वैध स्ट्रिंग प्रारूप आठ सेकंड के लिए "08", एक मिनट के लिए "01:00" और दो घंटे, 34 मिनट और दस सेकंड के लिए "02:34:10" हैं।

समय नकारात्मक हो सकता है, जो घड़ी को बदलने का कारण बनता है लेकिन किसी भी कॉलबैक को आग नहीं देगा।

clock.next();

पहले शेड्यूल किए गए टाइमर के क्षण के लिए घड़ी को आगे बढ़ाता है, इसे फायरिंग करता है।

clock.runAll();

यह सभी लंबित टाइमर तब तक चलता है जब तक कोई शेष न हो। यदि नई टाइमर्स जोड़ी जाती हैं, तो इसे निष्पादित करने के साथ ही उन्हें चलाया जाएगा।

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

clock.restore();

फेक तरीकों को बहाल करें।

जैसे कॉल tearDown