当我想测试错误消息的输出时,我不希望使用咖喱函数,这是什么原因?如果它将是一个return
值,则直接调用该函数将导致在.toBe
function calculateMedian({numbers}) {
if (Array.isArray(numbers) && numbers.length === 0) {
throw new Error('Cannot calcuate median without any numbers');
}
}
但是,如果我要测试以下没有匿名功能的代码,则测试只会失败。背后的原因是什么?
通过测试
it('should throw an error when given an empty array', () => {
expect(() =>
calculateMedian({
numbers: [],
}),
).toThrow('Cannot calcuate median without any numbers');
});
测试失败
it('should throw an error when given an empty array', () => {
expect(calculateMedian({numbers: []})
).toThrow('Cannot calcuate median without any numbers');
});
答案 0 :(得分:0)
define('DB_SERVER', 'db-container'); // if use the docker
和expect
只是函数调用。因此,为了使对异常的断言起作用,您作为toThrow
参数传递的内容需要允许测试框架控制执行。
流程类似于:
expect
将lambda保存为变量expect()
在toThrow()
块中执行保存的变量并测试捕获的异常。 不使用try/catch
方法的情况将类似于:
toThrow
如果不传递lambda /函数而仅调用函数,则将在程序控制到达try {
calculateMedian({numbers: []};
fail();
} catch (err) {
expect(err.message).toBe('Cannot calcuate median without any numbers')
}
方法之前引发错误。由于抛出错误,测试将失败。