【发布时间】:2020-11-06 12:43:13
【问题描述】:
【问题讨论】:
标签: angular ngrx ngrx-effects angular-unit-test angular10
【问题讨论】:
标签: angular ngrx ngrx-effects angular-unit-test angular10
希望有一天这对某人有用。
经过几个小时的调试和搜索,找到了问题的根本原因。
当tsconfig.base.json 中的target 设置为ES5 时会出现此问题。
默认情况下,Angular 10 使用 ES2015 的设置搭建脚手架,它可以正常工作。但是,该解决方案不适用于旧版浏览器,即。 IE11。
我们如何将目标设置为ES5,以便项目在 IE 中运行并通过单元测试?
嗯,解决方法很简单。
只需将tsconfig.spec.json 中的目标设置设置为ES2015(定义如下),而不更改基础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'}));
}));
解决了这个问题(不改变编译目标)。
【讨论】: