将 Angular 项目升级到 Angular 10 后,ngRx 效果单元测试开始中断。以下是升级后的错误:
遇到同样的问题,请按照解决方案。
谢谢,
希望有一天这对某人有用。
经过几个小时的调试和搜索,找到了问题的根本原因。
target
设置为ES5
in时会出现此问题tsconfig.base.json
。
默认情况下,Angular 10 会ES2015
使用可以正常工作的设置来搭建脚手架。但是,该解决方案不适用于旧版浏览器,即。IE11。
我们如何将目标设置为ES5
,以便项目在 IE 中运行并且单元测试也通过?
好吧,解决方案非常简单。
只需将目标设置设置tsconfig.spec.json
为ES2015
(定义如下),而不更改 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"]
}
输出:
快乐的编码和调试:-)
谢谢,
在我的项目中,这是由于使用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'}));
}));
解决了这个问题(不改变编译目标)。