【问题标题】: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
        }
        

        【讨论】:

          猜你喜欢
          • 2021-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-27
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多