下面是我的错误代码:
FAIL build/__test__/FuncOps.CheckFunctionExistenceByString.test.js
●
expect(CheckFunctionExistenceByStr(
'any string', 'FunctionThatDoesNotExistsInString'
)).toThrow();
Function FunctionThatDoesNotExistsInString does not exists in string.
at CheckFunctionExistenceByStr (build/FuncOps.js:35:15)
at Object.<anonymous> (build/__test__/FuncOps.CheckFunctionExistenceByString.test.js:12:51)
at new Promise (<anonymous>)
at <anonymous>
可以看到错误确实发生了:Function FunctionThatDoesNotExistsInString does not exists in string.
。然而,在Jest中,它不会被捕获为一个传球。
下面是我的代码:
test(`
expect(CheckFunctionExistenceByStr(
'any string', 'FunctionThatDoesNotExistsInString'
)).toThrow();
`, () => {
expect(CheckFunctionExistenceByStr(
'any string', 'FunctionThatDoesNotExistsInString'
)).toThrow();
}
);
4条答案
按热度按时间rryofs0p1#
expect(fn).toThrow()
需要一个函数fn
,当调用该函数时会引发异常。但是,您正在立即调用
CheckFunctionExistenceByStr
,这会导致函数在运行Assert之前抛出。替换
与
ubbxdtey2#
Jest在这里需要一个回调函数,而不是像下面这样传递函数定义:
请执行以下操作:
对于异步函数:
如果不需要传递参数,也可以执行以下操作:
ntjbwcob3#
我有一个类似的问题,但我的函数测试是异步的,因此你的期望必须看起来像这样:
await expect(async () => {await myFunctionToBeTested();}).rejects.toThrow('My Error message')
我从这里得到的解决方案
我加上了“期待之前等待”,因为Eslint一直在抱怨,但没有它也能工作。
bakd9h0s4#
对我来说,问题是我测试的函数是一个getter,即使省略了
()
也会立即执行。将getter封装在闭包(() => {myClass.get}
)中解决了这个问题。