Jest.js 测试将抛出的异常不起作用

20jt8wwn  于 11个月前  发布在  Jest
关注(0)|答案(3)|浏览(154)

这个简单的类只是一个例子:

class SomeClass{
    getTemplateName() {
        throw new Error('foo');
    }
}

字符串
来测试某个代码是否抛出了异常:

describe('dome class', () => {
    test('contains a method that will throw an exception', () => {
        var sc = new SomeClass();
        expect(sc.getTemplateName()).toThrow(new Error('foo'));
    });
});


但它不起作用我做错了什么

wf82jlnq

wf82jlnq1#

在Jest中,当你测试一个应该抛出错误的情况时,在测试函数的expect() Package 中,你需要提供一个额外的函数 Package 才能使它工作。
错误:

expect(functionUnderTesting()).toThrow(ErrorTypeOrErrorMessage);

字符串
右:

expect(() => { functionUnderTesting(); }).toThrow(ErrorTypeOrErrorMessage);


它应该使测试运行成功。

cl25kdpy

cl25kdpy2#

Jest docs说:
如果你想测试一个特定的错误是否被抛出,你可以给toThrow提供一个参数。这个参数可以是一个错误消息的字符串,一个错误的类,或者一个应该匹配错误的正则表达式。
所以你应该这样编码:

expect(sc.getTemplateName).toThrow('foo');

字符串
或者:

expect(sc.getTemplateName).toThrow(Error);

bsxbgnwa

bsxbgnwa3#

20.x.x以下的Jest版本不支持您正在使用的语法。此功能据说“即将推出”。
在此期间,您可以执行以下操作:

  • 同步示例:
try {
  expect(sc.getTemplateName())
} catch(e) {
  expect(e.message).toBe('foo')
}

字符串

  • 异步示例:
await expect(sc.getTemplateName()).toMatchObject({message: 'foo'})

相关问题