Sinon.JS 7 - Fake XHR and server

नकली XHR और सर्वर




sinon

नकली XHR और सर्वर

नकली XMLHttpRequest

XMLHttpRequest का एक नकली कार्यान्वयन प्रदान करता है और इसके द्वारा बनाई गई वस्तुओं में हेरफेर करने के लिए कई इंटरफेस प्रदान करता है।

इसके अलावा देशी XMLHttpRequest और ActiveXObject (जब उपलब्ध हो, और केवल XMLHTTP प्रचार के लिए)। XHR साथ किए गए परीक्षण अनुरोधों के साथ मदद करता है।

नकली सर्वर और XHR का उपयोग पूरी तरह से अकेले-अकेले sinon-server.js डाउनलोड करके किया जा सकता है।

{
    setUp: function () {
        this.xhr = sinon.useFakeXMLHttpRequest();
        var requests = this.requests = [];

        this.xhr.onCreate = function (xhr) {
            requests.push(xhr);
        };
    },

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

    "test should fetch comments from server" : function () {
        var callback = sinon.spy();
        myLib.getCommentsFor("/some/article", callback);
        assertEquals(1, this.requests.length);

        this.requests[0].respond(200, { "Content-Type": "application/json" },
                                 '[{ "id": 12, "comment": "Hey there" }]');
        assert(callback.calledWith([{ id: 12, comment: "Hey there" }]));
    }
}

sinon.useFakeXMLHttpRequest

var xhr = sinon.useFakeXMLHttpRequest();

ब्राउज़र में मूल XMLHttpRequest ऑब्जेक्ट को बदलने के लिए साइनॉन का कारण बनता है जो इसे कस्टम कार्यान्वयन के साथ समर्थन करता है जो वास्तविक अनुरोध नहीं भेजता है।

ActiveXObject समर्थन करने ActiveXObject ब्राउज़र में, इस निर्माता को बदल दिया जाता है, और नकली वस्तुओं को XMLHTTP progIds के लिए लौटा दिया जाता है। अन्य progIds, जैसे XMLDOM को अछूता छोड़ दिया जाता है।

मूल XMLHttpRequest ऑब्जेक्ट sinon.xhr.XMLHttpRequest पर उपलब्ध होगा

xhr.onCreate = function (xhr) {};

useFakeXMLHttpRequest() से लौटी हुई ऑब्जेक्ट की useFakeXMLHttpRequest() प्रॉपर्टी को एक फ़ंक्शन असाइन करके आप नए बनाए गए FakeXMLHttpRequest ऑब्जेक्ट्स की सदस्यता ले सकते हैं। नकली xr ऑब्जेक्ट API के लिए नीचे देखें।

इस पर्यवेक्षक का उपयोग करने का अर्थ है कि आप अभी भी उदाहरण के लिए jQuery.ajax (या अन्य सार / रूपरेखा) द्वारा बनाई गई वस्तुओं तक पहुंच सकते हैं।

xhr.restore();

मूल फ़ंक्शन को पुनर्स्थापित करें।

FakeXMLHttpRequest

String request.url

URL अनुरोध ऑब्जेक्ट पर सेट है।

String request.method

एक स्ट्रिंग के रूप में अनुरोध विधि।

Object request.requestHeaders

सभी अनुरोध हेडर की एक वस्तु, अर्थात:

{
    "Accept": "text/html, */*",
    "Connection": "keep-alive"
}

String request.requestBody

अनुरोध शरीर

int request.status

अनुरोध की स्थिति कोड।

undefined यदि अनुरोध को संभाला नहीं गया है (नीचे respond देखें)

String request.statusText

यदि respond विधि कहा जाता है, तो केवल आबादी (नीचे देखें)।

boolean request.async

अनुरोध अतुल्यकालिक है या नहीं।

String request.username

उपयोगकर्ता नाम, यदि कोई हो।

String request.password

पासवर्ड, यदि कोई हो

Document request.responseXML

respond का उपयोग respond , यह प्रॉपर्टी एक पार्स किए गए डॉक्यूमेंट के साथ पॉपुलेटेड होती है, यदि रिस्पॉन्स हेडर जितना संकेत देते हैं ( कल्पना देखें)

String request.getResponseHeader(header);

दिए गए प्रतिक्रिया हेडर का मूल्य, यदि अनुरोध का जवाब दिया गया है ( respond देखें)।

Object request.getAllResponseHeaders();

एक वस्तु के रूप में सभी प्रतिक्रिया हेडर।

फ़िल्टर किए गए अनुरोध

मॉकअप या आंशिक एकीकरण / कार्यात्मक परीक्षण के लिए Sinon.JS का उपयोग करते समय, आप कुछ अनुरोधों को नकली करना चाह सकते हैं, जबकि अन्य बैकएंड सर्वर से गुजर सकते हैं। फ़िल्टर किए गए FakeXMLHttpRequest s (v1.3.0 में नया) के साथ, आप कर सकते हैं।

FakeXMLHttpRequest.useFilters

डिफ़ॉल्ट false

जब true सेट किया जाता true , तो सिनॉन अतिरिक्त फ़िल्टर "अनफ़ेकडेड" होना चाहिए

FakeXMLHttpRequest.addFilter(fn)

एक फ़िल्टर जोड़ें जो यह तय करेगा कि अनुरोध को नकली करना है या नहीं।

सटीक समान तर्कों ( method , url , async , username , password ) के साथ xhr.open कहे जाने पर फ़िल्टर को बुलाया जाएगा। यदि फ़िल्टर true , तो अनुरोध नकली नहीं होगा।

सर्वर प्रतिक्रियाओं का अनुकरण

request.setStatus(status);

प्रतिक्रिया की स्थिति ( status और status गुण) सेट करता है।

स्थिति एक संख्या होनी चाहिए, स्थिति पाठ sinon.FakeXMLHttpRequest.statusCodes से देखा जाता है।

request.setResponseHeaders(object);

प्रतिसाद हेडर सेट करता है (उदाहरण { "Content-Type": "text/html", /* ... */ } , तैयार संपत्ति को अपडेट करता है और onreadystatechange आग लगाता है।

request.setResponseBody(body);

प्रतिसाद बॉडी सेट करता है, readyState संपत्ति को अपडेट करता है और onreadystatechange फायर करता है।

इसके अलावा, प्रतिक्रिया शीर्षकों के रूप में ज्यादा संकेत मिलता है, तो एक पार्स किए गए दस्तावेज़ के साथ responseXML आबाद करता है

request.respond(status, headers, body);

उपरोक्त तीन विधियों को कॉल करता है।

request.error();

अनुरोध पर नेटवर्क त्रुटि का अनुकरण करता है। onerror हैंडलर को बुलाया जाएगा और status 0 होगा।

Boolean request.autoRespond

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

डिफ़ॉल्ट टाइमआउट 10ms है, लेकिन आप इसे autoRespondAfter माध्यम से नियंत्रित कर सकते हैं।

ध्यान दें कि इस सुविधा का उद्देश्य मॉकअप विकास के दौरान मदद करना है, और परीक्षणों में उपयोग के लिए उपयुक्त नहीं है।

Number request.autoRespondAfter

जब autoRespond true , तो इस मिलीसेकंड की संख्या के बाद अनुरोधों का जवाब दें। डिफ़ॉल्ट 10 है।

नकली सर्वर

FakeXMLHttpRequest उदाहरणों में हेरफेर करने के लिए उच्च-स्तरीय एपीआई।

JSON-P को संभालने में मदद के लिए कृपया नीचे हमारे नोट देखें

{
    setUp: function () {
        this.server = sinon.createFakeServer();
    },

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

    "test should fetch comments from server" : function () {
        this.server.respondWith("GET", "/some/article/comments.json",
            [200, { "Content-Type": "application/json" },
             '[{ "id": 12, "comment": "Hey there" }]']);

        var callback = sinon.spy();
        myLib.getCommentsFor("/some/article", callback);
        this.server.respond();

        sinon.assert.calledWith(callback, [{ id: 12, comment: "Hey there" }]);

        assert(server.requests.length > 0)
    }
}

var server = sinon.createFakeServer([config]);

एक नया सर्वर बनाता है।

यह फ़ंक्शन sinon.useFakeXMLHttpRequest() भी कहता है।

createFakeServer नकली सर्वर को कॉन्फ़िगर करने के लिए वैकल्पिक गुणों को स्वीकार करता है। कॉन्फ़िगरेशन मापदंडों के लिए नीचे दिए गए options देखें।

var server = sinon.createFakeServerWithClock();

एक सर्वर बनाता है जो नकली टाइमर का भी प्रबंधन करता है।

यह तब उपयोगी होता है जब उदाहरण के लिए jHR 1.3.x के साथ बनाई गई XHR वस्तुओं का परीक्षण, जो सामान्य onreadystatechange बजाय ऑब्जेक्ट को पूरा करने के लिए टाइमर का उपयोग करता है।

server.configure(config);

नकली सर्वर को कॉन्फ़िगर करता है।

कॉन्फ़िगरेशन मापदंडों के लिए नीचे दिए गए options देखें।

server.respondWith(response);

प्रदान किए गए डेटा के साथ किसी अन्य प्रतिक्रिया से मेल नहीं खाने वाले किसी भी अनुरोध का जवाब देने के लिए सर्वर का कारण बनता है। डिफ़ॉल्ट कैच-ऑल रिस्पॉन्स [404, {}, ""]

response तीन चीजों में से एक हो सकती है:

  1. प्रतिक्रिया शरीर का प्रतिनिधित्व करने वाला एक String
  2. स्थिति, शीर्षलेख और प्रतिक्रिया निकाय के साथ एक Array , उदाहरण के लिए [200, { "Content-Type": "text/html", "Content-Length": 2 }, "OK"]
  3. एक Function

डिफ़ॉल्ट स्थिति 200 है और डिफ़ॉल्ट हेडर कोई नहीं है।

जब प्रतिक्रिया एक Function , यह अनुरोध वस्तु पारित किया जाएगा। अनुरोध को पूरा करने के लिए आपको मैन्युअल रूप से कॉल का respond चाहिए।

server.respondWith(url, response);

दिए गए URL के सभी अनुरोधों का जवाब देता है, जैसे /posts/1

server.respondWith(method, url, response);

दी गई प्रतिक्रिया के साथ दिए गए URL पर सभी method अनुरोधों का जवाब देता है।

method एक HTTP क्रिया है।

server.respondWith(urlRegExp, response);

URL एक नियमित अभिव्यक्ति हो सकता है, जैसे /\\/post\\//\\d+

यदि प्रतिक्रिया एक Function , तो इसे XMLHttpRequest ऑब्जेक्ट के साथ नियमित अभिव्यक्ति से किसी भी कैप्चर समूह को पास किया जाएगा:

server.respondWith(/\/todo-items\/(\d+)/, function (xhr, id) {
    xhr.respond(200, { "Content-Type": "application/json" }, '[{ "id": ' + id + " }]");
});

server.respondWith(method, urlRegExp, response);

नियमित अभिव्यक्ति से मेल खाने वाले URL के सभी method अनुरोधों का जवाब देता है।

server.respond();

प्रतिक्रिया प्राप्त करने के लिए सभी कतारबद्ध अतुल्यकालिक अनुरोधों का कारण बनता है।

यदि प्रतिसाद के साथ कोई भी प्रतिक्रिया मेल नहीं खाती है, तो डिफ़ॉल्ट प्रतिक्रिया [404, {}, ""]

सिंक्रोनस अनुरोधों का तुरंत जवाब दिया जाता है, इसलिए प्रतिसाद कॉल करना सुनिश्चित करें।

यदि तर्कों के साथ कहा जाता है, तो respondWith जाएगा। अनुरोधों पर प्रतिक्रिया देने से पहले उन तर्कों के साथ बुलाया जाएगा।

server.autoRespond = true;

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

डिफ़ॉल्ट टाइमआउट 10ms है, लेकिन आप इसे autoRespondAfter माध्यम से नियंत्रित कर सकते हैं।

ध्यान दें कि इस सुविधा का उद्देश्य मॉकअप विकास के दौरान मदद करना है, और परीक्षणों में उपयोग के लिए उपयुक्त नहीं है। तुल्यकालिक तत्काल प्रतिक्रियाओं के लिए, इसके बजाय प्रतिसाद का उपयोग करें।

server.autoRespondAfter = ms;

सर्वर एक टाइमआउट के बाद आने वाले अनुरोधों का स्वचालित रूप से जवाब देने का कारण बनता है।

server.respondImmediately = true;

यदि सेट किया जाता है, तो सर्वर हर अनुरोध का तुरंत और तुल्यकालिक रूप से जवाब देगा।

यह उस परीक्षण में किए गए प्रत्येक अनुरोध के बाद server.respond() को कॉल किए बिना सर्वर को परीक्षण के भीतर से server.respond() करने के लिए server.respond()

के रूप में यह तुल्यकालिक और तत्काल है, यह परीक्षण या मॉकअप में वास्तविक नेटवर्क विलंबता का अनुकरण करने के लिए उपयुक्त नहीं है। स्वचालित प्रतिक्रियाओं के साथ नेटवर्क विलंबता का अनुकरण करने के लिए, server.autoRespond और server.autoRespondAfter देखें।

सरणी server.requests

आप अनुरोध को सत्यापित करने के लिए server.requests का निरीक्षण कर सकते हैं, बेजोड़ अनुरोध पा सकते हैं या जांच सकते हैं कि कोई अनुरोध नहीं किया गया है। server.requests सभी FakeXMLHttpRequest ऑब्जेक्ट्स की एक सरणी है जो बनाई गई हैं।

Boolean server.fakeHTTPMethods

यदि यह true , तो सर्वर POST बॉडी में _method पैरामीटर _method और वास्तविक विधि के रूप में पहचान करेगा।

रूबी अनुप्रयोगों पर रूबी के लिए एक पैटर्न का समर्थन करता है। कस्टम HTTP विधि server.getHTTPMethod(request) , server.getHTTPMethod(request) ओवरराइड करें।

server.getHTTPMethod(request)

प्रदान किए गए अनुरोध के साथ उपयोग की गई HTTP विधि निर्धारित करने के लिए आंतरिक रूप से उपयोग किया जाता है।

डिफ़ॉल्ट रूप से यह विधि केवल request.method लौटाती है। जब server.fakeHTTPMethods सही है, तो विधि "POST" होने पर _method पैरामीटर का मान लौटा देगा।

कस्टम व्यवहार प्रदान करने के लिए इस पद्धति को ओवरराइड किया जा सकता है।

server.restore();

देशी XHR कंस्ट्रक्टर को पुनर्स्थापित करता है।

नकली सर्वर विकल्प

ये विकल्प सर्वर ऑब्जेक्ट पर गुण हैं और सीधे सेट किए जा सकते हैं

server.autoRespond = true

आप एक ऑब्जेक्ट शाब्दिक के साथ विकल्प भी बना सकते हैं createFakeServer और .configure

Boolean autoRespond

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

डिफ़ॉल्ट टाइमआउट 10ms है, लेकिन आप इसे autoRespondAfter माध्यम से नियंत्रित कर सकते हैं।

ध्यान दें कि इस सुविधा का उद्देश्य मॉकअप विकास के दौरान मदद करना है, और परीक्षणों में उपयोग के लिए उपयुक्त नहीं है।

तुल्यकालिक तत्काल प्रतिक्रियाओं के लिए, इसके बजाय प्रतिसाद का उपयोग करें।

Number autoRespondAfter (ms)

सर्वर एक टाइमआउट के बाद आने वाले अनुरोधों का स्वचालित रूप से जवाब देने का कारण बनता है।

Boolean respondImmediately

यदि सेट किया जाता है, तो सर्वर हर अनुरोध का तुरंत और तुल्यकालिक रूप से जवाब देगा।

यह उस परीक्षण में किए गए प्रत्येक अनुरोध के बाद सर्वर।

के रूप में यह तुल्यकालिक और तत्काल है, यह परीक्षण या मॉकअप में वास्तविक नेटवर्क विलंबता का अनुकरण करने के लिए उपयुक्त नहीं है। स्वचालित प्रतिक्रियाओं के साथ नेटवर्क विलंबता का अनुकरण करने के लिए, server.autoRespond और server.autoRespondAfter देखें।

boolean fakeHTTPMethods

यदि यह true , तो सर्वर POST बॉडी में _method पैरामीटर _method और वास्तविक विधि के रूप में पहचान करेगा।

रूबी अनुप्रयोगों पर रूबी के लिए एक पैटर्न का समर्थन करता है।

कस्टम HTTP मेथड server.getHTTPMethod(request) , server.getHTTPMethod(request) ओवरराइड करें