无法读取 JEST 中 IF 语句中未定义对象的属性

Pra*_*tha 6 javascript reactjs jestjs

我有一个简单的 if-else 语句

if(this.props.params.id){
    //do something
}
Run Code Online (Sandbox Code Playgroud)

现在,这在浏览器中运行良好。如果参数中有 id,则进入 if 子句;如果没有 id,则不进入 if 子句。

现在,在用 jest 编写测试时,当未定义 id 时,它会抛出错误:“无法读取未定义的属性'id'”为什么会发生这种情况,不应该将其视为 false 吗?它在浏览器中运行良好,只是在测试时会抛出错误。

小智 2

如果 id 本身未定义,那么您的测试将按预期工作(尽管有更好的编写方法)

您遇到的问题是由于 this.props.params 未定义。在这种情况下,您正在尝试访问不存在的属性。

要解决这个问题,您需要检查 params 和 id 是否都已定义。

你可以这样做:

if (typeof this.props.params !== 'undefined' && this.props.params.id !== 'undefined') {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

最好使用 typeof 检查未定义的变量,因为如果变量的计算结果为 false,则 if 语句可能会失败。