मुझे पता है कि सिर्फ टाइमआउट बढ़ाने का "समाधान" यह बताता है कि यहां वास्तव में क्या हो रहा है, जो कि या तो है
- आपका कोड और / या नेटवर्क कॉल बहुत धीमी गति से होते हैं (एक अच्छे उपयोगकर्ता अनुभव के लिए उप 100 ms होना चाहिए)
- मुखर (परीक्षण) विफल हो रहे हैं और मोचा उन पर कार्रवाई करने में सक्षम होने से पहले त्रुटियों को निगल रहा है।
आप आमतौर पर # 2 का सामना करते हैं जब मोचा को कॉलबैक से जोरदार त्रुटियाँ नहीं मिलती हैं। यह कुछ अन्य कोड के कारण होता है जो स्टैक को छोड़कर अपवाद को निगलता है। इससे निपटने का सही तरीका कोड को ठीक करना है और त्रुटि को निगलना नहीं है ।
जब बाहरी कोड आपकी त्रुटियों को निगल जाता है
यदि यह एक लाइब्रेरी फ़ंक्शन है जिसे आप संशोधित करने में असमर्थ हैं, तो आपको दावे को पकड़ने और इसे स्वयं मोचा पर पास करने की आवश्यकता है। आप एक कोशिश / कैच ब्लॉक में अपने जोर कॉलबैक को लपेटकर ऐसा करते हैं और किसी भी अपवाद को हैंडलर को पास करते हैं।
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(function (err, result) {
try { // boilerplate to be able to get the assert failures
assert.ok(true);
assert.equal(result, 'bar');
done();
} catch (error) {
done(error);
}
});
});
इस बायलरप्लेट को निश्चित रूप से कुछ उपयोगिता समारोह में निकाला जा सकता है ताकि परीक्षण आंख को थोड़ा और प्रसन्न कर सके:
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(handleError(done, function (err, result) {
assert.equal(result, 'bar');
}));
});
// reusable boilerplate to be able to get the assert failures
function handleError(done, fn) {
try {
fn();
done();
} catch (error) {
done(error);
}
}
नेटवर्क परीक्षणों को गति देना
इसके अलावा, मेरा सुझाव है कि आप एक कामकाजी नेटवर्क पर भरोसा किए बिना परीक्षण पास बनाने के लिए नेटवर्क कॉल के लिए टेस्ट स्टब्स का उपयोग शुरू करने के बारे में सलाह लें। मोचा, चाय और सिनॉन के प्रयोग से परीक्षण कुछ इस तरह दिख सकते हैं
describe('api tests normally involving network calls', function() {
beforeEach: function () {
this.xhr = sinon.useFakeXMLHttpRequest();
var requests = this.requests = [];
this.xhr.onCreate = function (xhr) {
requests.push(xhr);
};
},
afterEach: function () {
this.xhr.restore();
}
it("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" }]');
expect(callback.calledWith([{ id: 12, comment: "Hey there" }])).to.be.true;
});
});
अधिक जानकारी के लिए सिनोन के nise
डॉक्स देखें ।