/ / कॉल इंटर्न एसिन कॉलबैक एक से अधिक बार - जावास्क्रिप्ट, यूनिट-परीक्षण, एसिंक्रोनस, स्ट्रोफ, इंटर्न

इंटर्न एसिन कॉलबैक को एक से अधिक बार कॉल करें - जावास्क्रिप्ट, यूनिट-परीक्षण, एसिंक्रोनस, स्ट्रोफ, इंटर्न

क्या परिस्थितियों को निर्दिष्ट करना संभव हैएसिन कॉलबैक को इंटर्न में कहा जाना चाहिए? मान लीजिए कि हमारे पास एक परीक्षण परीक्षण है जो एक पंक्ति में कई XHR अनुरोध करता है। विशेष रूप से, मैं Strophe.connect के लिए प्रदान किए गए कॉलबैक के मेरे कार्यान्वयन का परीक्षण करने की कोशिश कर रहा हूं। यह उस तरह से काम करता है जैसे सर्वर पर कई XHR रिक्वेस्ट भेजता है, जो शुरुआती XMPP (BOSH) हैंडशेक को हैंडल करता है।

क्या यह परीक्षण करना संभव है कि 5 सेकंड मेंकॉलबैक को स्टेटस कोड 5 (कनेक्टेड) ​​कहा जाता है? समस्या यह है कि कॉलबैक को एक से अधिक बार ट्रिगर किया गया है और मुझे सही स्थिति कोड के लिए प्रतीक्षा करने की आवश्यकता है, दूसरों को दूर फेंक दें।

var dfd = this.async(5000);

conn.connection.connect("jid", "pass", dfd.callback(function(status) {
if(status === 5) {
expect(status).to.have(something);
} else {
// here, I need to say intern to
// do nothing, just let the callback
// to be triggered once more
}
return true;
}));

उत्तर:

उत्तर № 1 के लिए 1

क्योंकि आपके कॉलबैक को एक से अधिक बार कॉल किया जाएगा, इसलिए मैंने कॉलबैक को कवर करने के बजाय स्पष्ट रूप से स्थगित करने का समाधान करने का सुझाव दिया dfd.callback। इस तरह कुछ कोशिश करें:

var dfd = this.async(5000);

conn.connection.connect("jid", "pass", dfd.rejectOnError(function (status) {
if (status !== 5) {
return;
}

// do any assertions here

// explicitly resolve the test since it was successful to this point
dfd.resolve();
}));

सबसे पहले, आप देखेंगे कि हम कॉलबैक को इसके साथ लपेटते हैं dfd.rejectOnError। यदि आपके कॉलबैक फ़ंक्शन के किसी भी निष्पादन के दौरान कोई त्रुटि होती है, तो यह सुविधा पद्धति आस्थगित को अस्वीकार कर देगी। इसके बाद, हमने छुटकारा पा लिया dfd.callback, क्योंकि यह आस्थगित हल करने का प्रयास करेगा यदिलिपटे कॉलबैक एक त्रुटि फेंकने के बिना निष्पादित करता है। क्योंकि आपके कॉलबैक को कई बार कहा जाएगा, यह "टी वर्क" जीता है। स्पष्ट रूप से केवल आपके मानदंड पूरा होने पर आस्थगित को हल करके। (status !== 5 और जब तक कोई आस्थगित पांच सेकंड के भीतर हल हो जाता है तब तक आपकी कॉलबैक किसी भी संख्या में निष्पादित हो सकती है।