【发布时间】:2020-02-03 23:50:15
【问题描述】:
我正在编写一个单元测试,用于在未向对象提供某些参数时查找特定错误。作为我的测试设置的一部分,我将一个包含输入参数和预期错误消息的对象传递给它。在编写它们时,我为其中一个测试用例留下了所提供对象的预期错误消息。此测试应返回带有消息'Node process.env cannot be null' 的错误对象,它正在与.toThrow() 中的未定义对象进行比较。令我惊讶的是,这个测试仍然通过而不是抛出错误。 Jest 的.toThrow() 似乎将undefined 视为与我的错误消息相同的值。我正在使用 Jest 24.9.0 进行测试。
为什么这个测试通过了?这是由于 Typescript/Javascript 的行为造成的吗?这和 Jest 有关系吗?
it.each([
[
'missing event info',
{
event: undefined,
env: getValidEnv(),
expectedError: 'handler event cannot be null'
}
],
[
'missing environment info',
{
event: getValidEvent(),
env: undefined,
}
]
])('should throw an error if (%s)', (testCaseName: any, params: any) => {
const parser = new InputParser(params.event, params.env);
expect(() => parser.getInputs()).toThrow(params.expectedError);
});
编辑:
附加说明:如果将params.expectedError 设置为空字符串'',也会发生同样的情况。
【问题讨论】:
-
你确定
params.expectedError不只是undefined出于某种原因吗? -
这是未定义的,这就是我的观点。 InputParser 抛出
Node.process.env cannot be null错误,因为params.expectedError未定义,所以它不应该匹配。不过确实如此,所以单元测试通过了。
标签: javascript typescript jestjs