ऑब्जेक्ट पर domain
द्वारा एक हैंडलर के अंदर फेंक दिया गया त्रुटि पकड़ा गया है। आप कुछ अलग-अलग तरीकों की उपस्थिति के लिए परीक्षण कर सकते हैं।
मैं इनमें से किसी भी विचार से विशेष रूप से खुश नहीं हूं लेकिन वे दोनों काम करते हैं। उम्मीद है कि कोई और बेहतर तरीका जानता है।
प्लगइन
exports.register = function (server, options, next) {
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
throw new Error('You should test for this');
reply();
}
});
next();
}
परीक्षण
describe('Getting the homepage', function() {
it('Throws an error', function (done) {
server.inject({url: '/'}, function (resp) {
var error = resp.request.response._error;
expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('Uncaught error: You should test for this');
done();
});
});
});
वैकल्पिक
आप मैं पसंद नहीं है निजी _error
संपत्ति (उपरोक्त के रूप में) तक पहुंचने का डीए, आप domain
पर श्रोता जोड़ सकते हैं और object
अनुरोध पर स्वयं को त्रुटि संग्रहीत कर सकते हैं।
server.ext('onPreHandler', function (request, reply) {
request.domain.on('error', function (error) {
request.caughtError = error;
});
reply.continue();
});
परीक्षण
describe('Getting the homepage', function() {
it('Throws an error', function (done) {
server.inject({url: '/'}, function (resp) {
var error = resp.request.caughtError;
expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('Uncaught error: You should test for this');
done();
});
});
});
स्रोत
2015-03-12 09:23:19
मैट, आपकी मदद के लिए धन्यवाद! मैंने अभी आपके समाधान की कोशिश की है और समस्या यह है कि अपवाद अभी भी इसे बाहर कर रहा है जिससे मेरा परीक्षण विफल हो जाता है। मुझे क्या करना है यह सुनिश्चित करना है कि मेरा परीक्षण अपवाद को पकड़ लेता है, फिर यह सुनिश्चित करने के लिए जांच करें कि अपवाद क्या है। क्या डोमेन में टैप करने और पकड़े जाने के लिए हमारे परीक्षण में अपवाद को फिर से चैनल करने का कोई तरीका है? –
अधिक विशिष्ट प्रश्न, जब हम request.domain.on ('त्रुटि', कॉलबैक) में श्रोता जोड़ते हैं, तो क्या हम वहां उस अपवाद के प्रसार को भी रोक सकते हैं? –
मुझे पता चला कि समस्या क्या थी। मुझे अपनी प्लगइन से पहले अपना 'ऑन प्रिंडलर' एक्सटेंशन ले जाना पड़ा। –