我有一个简单的if-else语句为
if(this.props.params.id){
//do something
}
现在,这在浏览器中运行良好。 如果params中有id,则输入if子句,如果没有id则不会。
现在用jest编写测试时,如果未定义id,则会抛出错误: "无法阅读财产' id'未定义" 为什么会发生这种情况,不应该将其视为虚假吗? 它在浏览器中工作正常,只是在测试中它会抛出错误。
答案 0 :(得分:1)
如果id本身未定义,那么你的测试按预期工作(尽管有更好的编写方法)
你得到的问题是来自this.props.params未定义。在这种情况下,您试图访问一些不存在的属性。
要解决此问题,您需要检查是否定义了params AND id。
你可以这样做:
if (typeof this.props.params !== 'undefined' && this.props.params.id !== 'undefined') {
//do something
}
使用typeof检查未定义的变量要好得多,因为如果变量的计算结果为false,则if语句可能会失败。
答案 1 :(得分:0)
尝试:
if(this.props.params){
var id = this.props.params.id;
}
答案 2 :(得分:0)
在您可以检查之前:
if (bar.foo) {
// do something
}
您首先需要检查:
if (bar) {
if (bar.foo) {
// do something
}
}
或者在一个陈述中...
if (bar && bar.foo) {
// do something
}