5

将 Angular 项目升级到 Angular 10 后,ngRx 效果单元测试开始中断。以下是升级后的错误:

在此处输入图像描述

遇到同样的问题,请按照解决方案。

谢谢,

4

2 回答 2

14

希望有一天这对某人有用。

经过几个小时的调试和搜索,找到了问题的根本原因。

target设置为ES5in时会出现此问题tsconfig.base.json

默认情况下,Angular 10 会ES2015使用可以正常工作的设置来搭建脚手架。但是,该解决方案不适用于旧版浏览器,即。IE11。

我们如何将目标设置为ES5,以便项目在 IE 中运行并且单元测试也通过?

好吧,解决方案非常简单。

只需将目标设置设置tsconfig.spec.jsonES2015(定义如下),而不更改 base 中的任何配置tsconfig。这对我来说就像魅力一样,项目通过设置编译生成器,ES5单元测试在设置下运行良好ES2015

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./out-tsc/spec",
    "types": ["jasmine"],
    "target": "ES2015"
  },
  "files": ["src/test.ts", "src/polyfills.ts"],
  "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}

输出:

在此处输入图像描述

快乐的编码和调试:-)

谢谢,

于 2020-07-16T18:47:22.077 回答
1

在我的项目中,这是由于使用TestScheduler.run- 所以改变

it('should test some observable', () => {
    const scheduler = new TestScheduler((actual, expected) => expect(actual).toEqual(expected));
    scheduler.run(helpers => {
        const testObservable$ = getYourTestObservable();
        helpers.expectObservable(testObservable$).toBe('(a)', {a: 'some value'});
    });
});

it('should test some observable', fakeAsync(() => {
    const testObservable$ = getYourTestObservable();
    expect(testObservable$).toBeObservable(cold('(a)', {a: 'some value'}));
}));

解决了这个问题(不改变编译目标)。

于 2020-07-23T09:12:38.100 回答