变量未定义的单元测试期间的typescript抛出错误,即使我在文件的开头声明了var语句

时间:2017-07-05 20:26:07

标签: angular unit-testing karma-jasmine karma-webpack

我使用angular(2)和打字稿。我使用时刻库​​来转换日期,所以我在我的一个实用程序类中有这个函数:

static isoStringToDateObj(isoDateString: string): Date {
    // For unit tests and any environment where moment library is not present
    if (!moment) {
        return new Date(isoDateString);
    }
    return moment(isoDateString).toDate();
}

这在浏览器中工作正常,但是当我尝试运行单元测试时会抛出错误: ReferenceError:无法找到变量:karma-test-shim.js中的时刻(第16240行)

它所指的行是if (!moment)行。

  1. 为什么它关心变量在语句中是否不存在 只检查变量是否存在?它没有引用任何内容 它上面的属性。
  2. 我的declare var moment: any;位于顶部 函数isoStringToDateObj所在的文件,为什么呢 在实际声明变量时说参考错误?

1 个答案:

答案 0 :(得分:0)

检查全局变量是否不存在的唯一正确方法是:

if (typeof moment === 'undefined') { ... }
  

ReferenceError:找不到变量:时刻

是运行时错误,declare var moment: any欺骗打字系统对此保持沉默但不能以任何方式影响实际的moment全局。