javascript जेस्ट में फेंके गए अपवाद के प्रकार का परीक्षण कैसे करें




unit-testing jestjs (6)

मैं कुछ कोड के साथ काम कर रहा हूं, जहां मुझे फ़ंक्शन द्वारा फेंके गए अपवाद के प्रकार का परीक्षण करने की आवश्यकता है (क्या यह टाइप-इयरर, रेफरेंस इत्यादि है)।

मेरा वर्तमान परीक्षण ढांचा AVA है और मैं इसे दूसरे तर्क t.throws विधि के रूप में परख सकता हूं, जैसे:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => {
  const error = t.throws(() => {
    throwError();
  }, TypeError);

  t.is(error.message, 'UNKNOWN ERROR');
});

मैंने जेस्ट को अपने परीक्षण फिर से लिखना शुरू कर दिया और आसानी से ऐसा करने का तरीका नहीं खोज सका। क्या यह भी संभव है?


जेस्ट में एक विधि है जो परीक्षण करने के लिए toThrow(error)

तो, आपके मामले में आपको इसे कॉल करना चाहिए:

expect(t).toThrowError(TypeError);

toThrow


मैं थोड़ा अधिक संक्षिप्त संस्करण का उपयोग करता हूं:

expect(() => {
  //code block that should throw error
}).toThrow(TypeError) //or .toThrow('expectedErrorMessage')

प्रयत्न
expect(t).rejects.toThrow()


यह खुद करने की कोशिश नहीं की है, लेकिन मैं जेस्ट के toThrow का उपयोग करने का सुझाव toThrow । इसलिए मुझे लगता है कि आपका उदाहरण कुछ इस तरह दिखाई देगा:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => {
  const error = t.throws(() => {
    throwError();
  }, TypeError);

  expect(t).toThrowError('UNKNOWN ERROR');
  //or
  expect(t).toThrowError(TypeError);
});

फिर से, यह परीक्षण नहीं किया है, लेकिन मुझे लगता है कि यह काम करना चाहिए।

मुझे पता है अगर यह मदद की।

हैप्पी कोडिंग!


मैंने अपने परीक्षण-बर्तनों के पुस्तकालय के लिए एक सुविधा विधि लिखना समाप्त कर दिया

/**
 *  Utility method to test for a specific error class and message in Jest
 * @param {fn, expectedErrorClass, expectedErrorMessage }
 * @example   failTest({
      fn: () => {
        return new MyObject({
          param: 'stuff'
        })
      },
      expectedErrorClass: MyError,
      expectedErrorMessage: 'stuff not yet implemented'
    })
 */
  failTest: ({ fn, expectedErrorClass, expectedErrorMessage }) => {
    try {
      fn()
      expect(true).toBeFalsy()
    } catch (err) {
      let isExpectedErr = err instanceof expectedErrorClass
      expect(isExpectedErr).toBeTruthy()
      expect(err.message).toBe(expectedErrorMessage)
    }
  }

थोड़ा अजीब है, लेकिन काम करता है और इहो अच्छा पठनीय है:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', () => {
  try {
      throwError();
      // Fail test if above expression doesn't throw anything.
      expect(true).toBe(false);
  } catch (e) {
      expect(e.message).toBe("UNKNOWN ERROR");
  }
});

Catch ब्लॉक आपके अपवाद को पकड़ता है, फिर आप अपनी उठाई गई Error पर परीक्षण कर सकते हैं। अजीब expect(true).toBe(false); यदि अपेक्षित Error नहीं होगी, तो आपके परीक्षण को विफल करने के लिए आवश्यक है। अन्यथा यह रेखा कभी भी उपलब्ध नहीं है ( Error को उनके सामने उठाया जाना चाहिए)।





jestjs