2015-03-12 10 views
5

मैं lab का उपयोग कर परीक्षण केस लिख रहा हूं और मैं यह जांचना चाहता हूं कि मेरी प्लगइन से अपवाद फेंक दिया गया है या नहीं। समस्या यह है कि, हैपी अपवाद को बुलबुला करने की इजाजत देता है जबकि आंतरिक सर्वर त्रुटि 500 ​​की प्रतिक्रिया भी सेट करता है जो मेरा परीक्षण विफल होने का कारण बनता है।प्रयोगशाला में अपवादों का परीक्षण कैसे करें?

हम इस प्रतिक्रिया expect(res.statusCode).to.equal(500) के लिए परीक्षण कर सकते हैं लेकिन परीक्षण अभी भी विफल हो जाएगा।

मैं server.inject के आसपास प्रयास/पकड़ का उपयोग नहीं कर सकता क्योंकि अपवाद को असंकालिक रूप से फेंक दिया जाता है।

अपवादों के परीक्षण के लिए मैं प्रयोगशाला का उपयोग कैसे करूं?

उत्तर

2

ऑब्जेक्ट पर 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(); 

    }); 
    }); 
}); 
+0

मैट, आपकी मदद के लिए धन्यवाद! मैंने अभी आपके समाधान की कोशिश की है और समस्या यह है कि अपवाद अभी भी इसे बाहर कर रहा है जिससे मेरा परीक्षण विफल हो जाता है। मुझे क्या करना है यह सुनिश्चित करना है कि मेरा परीक्षण अपवाद को पकड़ लेता है, फिर यह सुनिश्चित करने के लिए जांच करें कि अपवाद क्या है। क्या डोमेन में टैप करने और पकड़े जाने के लिए हमारे परीक्षण में अपवाद को फिर से चैनल करने का कोई तरीका है? –

+0

अधिक विशिष्ट प्रश्न, जब हम request.domain.on ('त्रुटि', कॉलबैक) में श्रोता जोड़ते हैं, तो क्या हम वहां उस अपवाद के प्रसार को भी रोक सकते हैं? –

+0

मुझे पता चला कि समस्या क्या थी। मुझे अपनी प्लगइन से पहले अपना 'ऑन प्रिंडलर' एक्सटेंशन ले जाना पड़ा। –

संबंधित मुद्दे