Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在JEST中读取IF语句中未定义对象的属性_Javascript_Reactjs_Jestjs - Fatal编程技术网

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

Javascript 无法在JEST中读取IF语句中未定义对象的属性,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,我有一个简单的if-else语句 if(this.props.params.id){ //do something } 现在,这可以在浏览器中正常工作。 如果params中有一个id,它将进入If子句,如果没有id则不输入 现在,在使用jest编写测试时,如果未定义id,则会抛出一个错误: “无法读取未定义的属性“id” 为什么会发生这种情况,难道不应该把它当作假的吗? 它可以在浏览器中正常工作,只是在测试中会抛出错误。如果id本身未定义,那么您的测试将按预期工作(尽管有更好的编写方法

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

if(this.props.params.id){
    //do something
}
现在,这可以在浏览器中正常工作。 如果params中有一个id,它将进入If子句,如果没有id则不输入

现在,在使用jest编写测试时,如果未定义id,则会抛出一个错误: “无法读取未定义的属性“id” 为什么会发生这种情况,难道不应该把它当作假的吗?
它可以在浏览器中正常工作,只是在测试中会抛出错误。

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

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

要解决这个问题,您需要检查是否同时定义了params和id

您可以这样做:

if (typeof this.props.params !== 'undefined' && this.props.params.id !== 'undefined') {
    //do something
}
最好使用typeof检查未定义的变量,因为如果变量的计算结果为false,if语句可能会失败。

请尝试:

if(this.props.params){
    var id = this.props.params.id;
}
在检查之前:

if(bar.foo){
//做点什么
}
您首先必须检查:

if(bar){
if(bar.foo){
//做点什么
}
}
或者在一份声明中

if(bar&&bar.foo){
//做点什么
}