【发布时间】:2019-08-17 11:55:01
【问题描述】:
我有一个 Angular 7 项目,其中 lib=es2015 和 target=es2015,Angular-CLI 编译和应用程序运行都非常好。但是,当使用ng test 运行单元测试时,Karma 或 TypeScript 编译器告诉我“字符串”类型上不存在属性“padStart”
27 03 2019 10:40:57.424:INFO [karma-server]: Karma v4.0.1 server started at http://0.0.0.0:9876/
27 03 2019 10:40:57.424:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
27 03 2019 10:40:57.429:INFO [launcher]: Starting browser Chrome
ERROR in node_modules/@azure/storage-blob/lib/utils/utils.common.ts(300,24): error TS2339: Property 'padStart' does not exist on type 'String'.
node_modules/@azure/storage-blob/lib/utils/utils.common.ts(301,26): error TS2339: Property 'padStart' does not exist on type 'string'.
在检查错误消息中指示的违规代码时:
export function padStart(
currentString: string,
targetLength: number,
padString: string = " "
): string {
if (String.prototype.padStart) {
return currentString.padStart(targetLength, padString);
}
...
我发现最后两行代码对我来说看起来非常好,因为我知道 padStart 是在 es2017 中定义的,所以 lib 的程序员已经制作了这些。如果在tsconfig.json中我有lib=es2017和target=es2015,那么编译ng test就可以了。
我喜欢找出问题的原因,怀疑是:Type Script 编译器、Karma、Angular 编译器或有问题的代码。你觉得是哪一种?
【问题讨论】:
-
我相信 karma 会使用不同的 tsconfig 开箱即用...你可以尝试更新 src/app/tsconfig.test.json 吗?
-
运行 ng build 时是否显示该错误?
-
@Explosion Pills,虽然 Angular.json 确实指向未定义 lib 和目标的 tsconfig.test.json,但我相信 karma 也使用显然由应用程序和规范共享的 tsconfig.json,因为为 lib 和 target 更改 tsconfig.json 确实解决了这个问题。但是,我认为在语义上所有版本的 JavaScript 引擎中的违规代码都很好。你认为是吗?我只是想找出问题的原因,怀疑是:TS编译器,Karma,Angular编译器,或者有问题的代码。你觉得是哪一种?
标签: angular typescript unit-testing karma-runner