【问题标题】:Cannot read property of an undefined object in a IF statement in JEST无法在 JEST 的 IF 语句中读取未定义对象的属性
【发布时间】:2016-05-31 13:26:34
【问题描述】:
我有一个简单的 if-else 语句
if(this.props.params.id){
//do something
}
现在,这在浏览器中运行良好。
如果参数中有 id 则进入 if 子句,如果没有 id 则不进入。
现在在用 jest 编写测试时,如果未定义 id,则会引发错误:
“无法读取未定义的属性 'id'”
为什么会发生这种情况,它不应该把它当作假的吗?
它在浏览器中运行良好,只是在测试中它会引发错误。
【问题讨论】:
标签:
javascript
reactjs
jestjs
【解决方案1】:
如果 id 本身未定义,那么您的测试将按预期工作(尽管有更好的编写方法)
您遇到的问题是 this.props.params 未定义。在这种情况下,您正在尝试访问不存在的东西的属性。
要解决这个问题,您需要检查是否定义了参数和 id。
你可以这样做:
if (typeof this.props.params !== 'undefined' && this.props.params.id !== 'undefined') {
//do something
}
最好使用 typeof 来检查未定义的变量,因为如果变量的计算结果为 false,您的 if 语句可能会失败。
【解决方案2】:
试试:
if(this.props.params){
var id = this.props.params.id;
}
【解决方案3】:
在您可以检查之前:
if (bar.foo) {
// do something
}
您首先必须检查:
if (bar) {
if (bar.foo) {
// do something
}
}
或者在一个声明中......
if (bar && bar.foo) {
// do something
}