Sinon.JS 7

Sandboxes




sinon

Sandboxes

सैंडबॉक्स हर बनाए गए नकली का ट्रैक रखने की आवश्यकता को हटाता है, जो सफाई को बहुत सरल करता है।

var sandbox = require('sinon').createSandbox();
var myAPI = { hello: function () {} };

describe('myAPI.hello method', function () {

    beforeEach(function () {
        // stub out the `hello` method
        sandbox.stub(myAPI, 'hello');
    });

    afterEach(function () {
        // completely restore all fakes created through the sandbox
        sandbox.restore();
    });

    it('should be called once', function () {
        myAPI.hello();
        sandbox.assert.calledOnce(myAPI.hello);
    });

    it('should be called twice', function () {
        myAPI.hello();
        myAPI.hello();
        sandbox.assert.calledTwice(myAPI.hello);
    });
});

सैंडबॉक्स एपीआई

डिफ़ॉल्ट सैंडबॉक्स

चूंकि [email protected] , sinon ऑब्जेक्ट एक डिफ़ॉल्ट सैंडबॉक्स है। जब तक आपके पास बहुत उन्नत सेटअप नहीं है या आपको एक विशेष कॉन्फ़िगरेशन की आवश्यकता है, तो आप शायद उस एक का उपयोग करना चाहते हैं।

var sandbox = sinon.createSandbox();

जासूस, स्टब्स और मोक्स के साथ एक नया सैंडबॉक्स ऑब्जेक्ट बनाता है।

var sandbox = sinon.createSandbox(config);

sinon.createSandbox(config) विधि अक्सर एक एकीकरण सुविधा है, और सभी sinon.createSandbox(config) समन्वय करने के लिए वैश्विक ऑब्जेक्ट सहित परिदृश्यों के लिए उपयोग किया जा सकता है।

सैंडबॉक्स आंशिक रूप से डिफ़ॉल्ट रूप से कॉन्फ़िगर किए जाते हैं जैसे कि कॉलिंग:

var sandbox = sinon.createSandbox({});

अतिरिक्त चूक में विलय होगा:

var sandbox = sinon.createSandbox({
    // ...
    injectInto: null,
    properties: ["spy", "stub", "mock"],
    useFakeTimers: false,
    useFakeServer: false
});

useFakeTimers में चूक के विरोध के रूप में useFakeTimers और useFakeServers झूठे हैं:

sinon.defaultConfig = {
    // ...
    injectInto: null,
    properties: ["spy", "stub", "mock", "clock", "server", "requests"],
    useFakeTimers: true,
    useFakeServer: true
}

स्टब्स, जासूस, आदि और नकली टाइमर और सर्वर के साथ एक पूर्ण सैंडबॉक्स प्राप्त करने के लिए, आप कॉल कर सकते हैं:

// Inject the sinon defaults explicitly.
var sandbox = sinon.createSandbox(sinon.defaultConfig);

// (OR) Add the extra properties that differ from the sinon defaults.
var sandbox = sinon.createSandbox({
    useFakeTimers: true
    useFakeServer: true
});
injectInto

सैंडबॉक्स के तरीकों को सुविधा के लिए किसी अन्य ऑब्जेक्ट में इंजेक्ट किया जा सकता है। injectInto कॉन्फ़िगरेशन विकल्प में गुण जोड़ने के लिए किसी ऑब्जेक्ट का नाम दिया जा सकता है।

गुण

इंजेक्शन लगाने के लिए क्या गुण। ध्यान दें कि यहां "सर्वर" का नामकरण पर्याप्त नहीं है कि server ऑब्जेक्ट को लक्ष्य ऑब्जेक्ट में दिखाया गया है, आपको useFakeServer करना है true लिए useFakeServer सेट करना।

useFakeTimers

यदि यह true , तो सैंडबॉक्स में clock संपत्ति होगी। आप वैकल्पिक रूप से एक कॉन्फ़िगरेशन ऑब्जेक्ट में गुजर सकते हैं जो नकली टाइमर के लिए विनिर्देशन का अनुसरण करता है , जैसे कि { toFake: ["setTimeout", "setInterval"] }

useFakeServer

यदि true , server और requests गुण सैंडबॉक्स में जोड़े जाते हैं। नकली सर्वर के लिए उपयोग करने के लिए एक वस्तु भी हो सकती है। डिफ़ॉल्ट एक sinon.fakeServer , लेकिन यदि आप jQuery 1.3.x या कुछ अन्य लाइब्रेरी का उपयोग कर रहे हैं, जो XHR के onreadystatechange हैंडलर को सेट नहीं करता है, तो आप करना चाहते हैं:

sinon.config = {
    useFakeServer: sinon.fakeServerWithClock
};

sandbox.assert();

sinon.assert लिए एक सुविधा संदर्भ

चूंकि [email protected]

sandbox.replace(object, property, replacement);

replacement तर्क के साथ object पर property को replacement है। पहले से ही प्रतिस्थापित मूल्य को बदलने का प्रयास एक अपवाद का कारण बनता है।

replacement कोई भी मूल्य हो सकता है, जिसमें spies , stubs और fakes

यह विधि केवल गैर-एक्सेसर गुणों पर काम करती है, sandbox.replaceGetter() को बदलने के लिए, sandbox.replaceGetter() और sandbox.replaceSetter()

var myObject = {
    myMethod: function() {
        return 'apple pie';
    }
};

sandbox.replace(myObject, 'myMethod', function () {
    return 'strawberry';
});

console.log(myObject.myMethod());
// strawberry

sandbox.replaceGetter();

replacement तर्क के साथ object पर property लिए गेटर को replacement है। पहले से ही प्रतिस्थापित गेटटर को बदलने का प्रयास एक अपवाद का कारण बनता है।

replacement एक Function होना चाहिए, और spies , stubs और fakes उदाहरण हो सकते हैं।

var myObject = {
    get myProperty: function() {
        return 'apple pie';
    }
};

sandbox.replaceGetter(myObject, 'myMethod', function () {
    return 'strawberry';
});

console.log(myObject.myProperty);
// strawberry

sandbox.replaceSetter();

replacement तर्क के साथ object पर property लिए सेटर की जगह। पहले से ही बदल चुके सेटर को बदलने का प्रयास एक अपवाद का कारण बनता है।

replacement एक Function होना चाहिए, और spies , stubs और fakes उदाहरण हो सकते हैं।

var object = {
    set myProperty(value) {
        this.prop = value;
    }
};

sandbox.replaceSetter(object, 'myProperty', function (value) {
    this.prop = 'strawberry ' + value;
});

object.myProperty = 'pie';

console.log(object.prop);
// strawberry pie

sandbox.spy();

बिल्कुल sinon.spy तरह काम करता है

sandbox.createStubInstance();

लगभग बिल्कुल sinon.createStubInstance तरह काम करता है, केवल sinon.createStubInstance sandbox.restore() माध्यम से आसान पुनर्स्थापना के लिए नकली के आंतरिक संग्रह में लौटे हुए स्टब्स को भी जोड़ता है।

sandbox.stub();

बिल्कुल sinon.stub तरह काम करता है।

एक गैर-फ़ंक्शन संपत्ति को स्टब करना
const myObject = {
    'hello': 'world'
};

sandbox.stub(myObject, 'hello').value('Sinon');

console.log(myObject.hello);
// Sinon

sandbox.restore();
console.log(myObject.hello);
// world

sandbox.mock();

बिल्कुल sinon.mock तरह काम करता है

sandbox.useFakeTimers();

टाइमर और सैंडबॉक्स के लिए clock वस्तु को बांधता है, जैसे कि सैंडबॉक्स.स्टोर sandbox.restore() कॉल करते समय इसे बहाल किया जाता है।

sandbox.clock माध्यम से प्रवेश।

sandbox.useFakeXMLHttpRequest();

XHR को ले जाता है और परिणामी वस्तु को सैंडबॉक्स में बांध देता है, जैसे कि सैंडबॉक्स sandbox.restore() को पुनर्स्थापित करते समय इसे भी पुनर्स्थापित किया जाता है sandbox.restore()

2.x के बाद से, आप sandbox.requests माध्यम से अनुरोधों का उपयोग नहीं कर सकते हैं। ऐसा करने के लिए sandbox.useFakeServer का उपयोग करें sandbox.useFakeServer । यह फ़ंक्शन केवल सैंडबॉक्सिंग के साथ sinon.useFakeXMLHttpRequest पर मैप करता है।

sandbox.useFakeServer();

XHR को ले जाता है और सैंडबॉक्स के लिए एक सर्वर ऑब्जेक्ट को बांधता है जैसे कि सैंडबॉक्स.स्टोर sandbox.restore() कॉल करते समय इसे भी पुनर्स्थापित किया जाता है।

sandbox.requests माध्यम से एक्सेस अनुरोधों और sandbox.server माध्यम से सर्वर और सर्वर

sandbox.usingPromise(promiseLibrary);

stub.rejects या stub.resolves का उपयोग करते समय वैश्विक एक के बजाय एक विशिष्ट वादा पुस्तकालय का उपयोग करके वादों को वापस करने के लिए सैंडबॉक्स से बनाए गए सभी स्टब्स और stub.rejects का stub.rejects stub.resolves । पीछा करने की अनुमति देने के लिए स्टब लौटाता है।

चूंकि [email protected]

sandbox.restore();

सैंडबॉक्स के माध्यम से बनाए गए सभी फेक को पुनर्स्थापित करता है।

sandbox.reset();

सैंडबॉक्स के माध्यम से बनाए गए सभी फेक की आंतरिक स्थिति को रीसेट करता है।

sandbox.resetBehavior();

सैंडबॉक्स के माध्यम से बनाए गए सभी स्टब्स के व्यवहार को रीसेट करता है।

चूंकि [email protected]

sandbox.resetHistory();

सैंडबॉक्स के माध्यम से बनाए गए सभी स्टब्स के इतिहास को रीसेट करता है।

चूंकि [email protected]

sandbox.verify();

सैंडबॉक्स के माध्यम से बनाए गए सभी मोज़ों को सत्यापित करता है।

sandbox.verifyAndRestore();

सभी मोक्स को सत्यापित करता है और सैंडबॉक्स के माध्यम से बनाए गए सभी फेक को पुनर्स्थापित करता है।