Sinon.JS 7

Mocks




sinon

Mocks

परिचय

मोक्स क्या हैं?

नकली (और नकली अपेक्षाएं) पूर्व-प्रोग्राम किए गए व्यवहार (जैसे स्टब्स) के साथ-साथ पूर्व-प्रोग्राम की गई अपेक्षाओं के साथ नकली तरीके (जासूसों की तरह) हैं

एक मॉक आपके परीक्षण को विफल कर देगा यदि यह अपेक्षित रूप से उपयोग नहीं किया जाता है।

मोक्स का उपयोग कब करें?

परीक्षण के तहत विधि के लिए मोक्स का ही उपयोग किया जाना चाहिए। प्रत्येक इकाई परीक्षण में, परीक्षण के तहत एक इकाई होनी चाहिए।

यदि आप यह नियंत्रित करना चाहते हैं कि आपकी इकाई का उपयोग कैसे किया जा रहा है और अपेक्षाओं को आगे बढ़ाते हुए (जैसा कि तथ्य के बाद जोर देने के विपरीत), एक मॉक का उपयोग करें।

मोक्स का उपयोग कब नहीं करना है?

मोज़े अंतर्निहित उम्मीदों के साथ आते हैं जो आपके परीक्षण को विफल कर सकते हैं।

इस प्रकार, वे कार्यान्वयन विवरण लागू करते हैं। अंगूठे का नियम है: यदि आप कुछ विशिष्ट कॉल के लिए जोर नहीं जोड़ेंगे, तो इसका मजाक न उड़ाएं। इसके बजाय एक स्टब का उपयोग करें।

सामान्य तौर पर आपके पास एक परीक्षण में एक से अधिक मॉक (संभवतः कई उम्मीदों के साथ) नहीं होना चाहिए।

Expectations spies और stubs दोनों एपीआई को लागू करती हैं।

यह देखने के लिए कि सिनोन जे.जे.एस. में कौन सी नकली दिखती है, यहाँ PubSubJS परीक्षणों में से एक है, इस बार कॉलबैक के रूप में एक विधि का उपयोग करके और इसके व्यवहार को सत्यापित करने के लिए PubSubJS का उपयोग करना।

"test should call all subscribers when exceptions": function () {
    var myAPI = { method: function () {} };

    var spy = sinon.spy();
    var mock = sinon.mock(myAPI);
    mock.expects("method").once().throws();

    PubSub.subscribe("message", myAPI.method);
    PubSub.subscribe("message", spy);
    PubSub.publishSync("message", undefined);

    mock.verify();
    assert(spy.calledOnce);
}

मोक्स एपीआई

गुण

var mock = sinon.mock(obj);

प्रदान की गई वस्तु के लिए एक नकली बनाता है।

ऑब्जेक्ट को बदलता नहीं है, लेकिन ऑब्जेक्ट के तरीकों पर अपेक्षाओं को सेट करने के लिए एक नकली ऑब्जेक्ट देता है।

var expectation = mock.expects("method");

एक मॉक फ़ंक्शन के साथ obj.method को ओवरराइड करता है और इसे वापस करता है।

नीचे देखें Expectations

mock.restore();

सभी नकली तरीकों को पुनर्स्थापित करता है।

mock.verify();

मॉक पर सभी उम्मीदों को सत्यापित करता है।

यदि कोई उम्मीद संतुष्ट नहीं है, तो एक अपवाद फेंक दिया जाता है।

नकली तरीकों को भी पुनर्स्थापित करता है।

mock.usingPromise(promiseLibrary);

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

चूंकि [email protected]

उम्मीदें

सभी उम्मीद के तरीके उम्मीद को वापस करते हैं, जिसका अर्थ है कि आप उन्हें चेन कर सकते हैं।

विशिष्ट उपयोग:

sinon.mock(jQuery).expects("ajax").atLeast(2).atMost(5);
jQuery.ajax.verify();

var expectation = sinon.expectation.create([methodName]);

एक मॉक ऑब्जेक्ट के बिना एक उम्मीद बनाता है, मूल रूप से एक गुमनाम नकली फ़ंक्शन।

विधि का नाम वैकल्पिक है और उन्हें अधिक पठनीय बनाने के लिए अपवाद संदेशों में उपयोग किया जाता है।

var expectation = sinon.mock([methodName]);

ऊपर के समान।

expectation.atLeast(number);

अपेक्षित कॉल की न्यूनतम राशि निर्दिष्ट करें।

expectation.atMost(number);

अपेक्षित अधिकतम कॉल निर्दिष्ट करें।

expectation.never();

कभी न कहे जाने की विधि की अपेक्षा करें।

expectation.once();

एक बार पुकारे जाने की विधि की अपेक्षा करें।

expectation.twice();

विधि को दो बार कहने की अपेक्षा करें।

expectation.thrice();

तीन बार कहे जाने वाली विधि की अपेक्षा करें।

expectation.exactly(number);

उम्मीद की जाती है कि विधि को कितनी बार number कहा जाए।

expectation.withArgs(arg1, arg2, ...);

प्रदान किए गए तर्कों और संभवतः दूसरों के साथ बुलाया जाने वाली विधि की अपेक्षा करें।

एक expectation उदाहरण केवल तर्क के साथ निर्दिष्ट तर्कों के एक सेट पर रखती है। बाद की कॉलें तर्कों के पहले से निर्दिष्ट सेट को ओवरराइट कर देंगी (भले ही वे अलग-अलग हों), इसलिए आमतौर पर यह इरादा नहीं किया जाता है कि इस विधि को एक से अधिक बार परीक्षण के मामले में लागू किया जाए।

expectation.withExactArgs(arg1, arg2, ...);

प्रदान किए गए तर्कों और अन्य लोगों के साथ बुलाए जाने की विधि की अपेक्षा करें।

एक expectation उदाहरण केवल withExactArgs साथ निर्दिष्ट तर्कों के एक सेट पर withExactArgs । बाद की कॉलें तर्कों के पहले से निर्दिष्ट सेट को ओवरराइट कर देंगी (भले ही वे अलग-अलग हों), इसलिए आमतौर पर यह इरादा नहीं किया जाता है कि इस विधि को एक से अधिक बार परीक्षण के मामले में लागू किया जाए।

expectation.on(obj);

this रूप में obj साथ बुलाए जाने की विधि की अपेक्षा this । ""

expectation.verify();

अपेक्षा को सत्यापित करता है और एक अपवाद फेंकता है यदि यह पूरा नहीं हुआ है।