जेस्ट में मेरे (सीमित सीमित) एक्सपोजर से, मैंने पाया है कि expect().toThrow()
यदि आप केवल एक विशिष्ट प्रकार की त्रुटि का परीक्षण करना चाहते हैं तो उपयुक्त है:
expect(() => functionUnderTest()).toThrow(TypeError);
या एक त्रुटि एक विशिष्ट संदेश के साथ फेंक दी जाती है:
expect(() => functionUnderTest()).toThrow('Something bad happened!');
यदि आप दोनों करने की कोशिश करते हैं, तो आपको एक झूठी सकारात्मक मिलेगी। उदाहरण के लिए यदि आपका कोड फेंकता है RangeError('Something bad happened!')
, तो यह परीक्षा पास होगी:
expect(() => functionUnderTest()).toThrow(new TypeError('Something bad happened!'));
बॉडोलसोग का उत्तर जो एक कोशिश / कैच का उपयोग करने का सुझाव देता है, करीब है, लेकिन पकड़ने में आशाओं को सुनिश्चित करने के लिए झूठे होने की अपेक्षा करने के लिए सही होने की अपेक्षा, आप expect.assertions(2)
अपने परीक्षण की शुरुआत में उपयोग कर सकते हैं , जहां 2
अपेक्षित आशाओं की संख्या है । मुझे लगता है कि यह परीक्षण के इरादे का सटीक वर्णन करता है।
त्रुटि के प्रकार और संदेश के परीक्षण का पूर्ण उदाहरण:
describe('functionUnderTest', () => {
it('should throw a specific type of error.', () => {
expect.assertions(2);
try {
functionUnderTest();
} catch (error) {
expect(error).toBeInstanceOf(TypeError);
expect(error).toHaveProperty('message', 'Something bad happened!');
}
});
});
यदि functionUnderTest()
कोई त्रुटि नहीं करता है, तो दावे पर प्रहार किया जाएगा लेकिन वह expect.assertions(2)
विफल हो जाएगा और परीक्षण विफल हो जाएगा।