我们有一个使用SystemJS的旧Angular 4项目。我们被要求使用Jasmine和Karma实施单元测试用例。我开始为一个组件编写一个测试套件。看起来像这样(下面的伪代码):
beforeEach(async(() => {
TestBed.configureTestingModule(
imports,
providers,
declarations etc.
).compileComponents();
}));
APP_INITIALIZER中有很多初始化代码,可以在应用程序中设置各种状态(例如参考数据,配置,用户信息)。为了使测试用例顺利运行,我们需要运行初始化代码。知道如何实现吗?
答案 0 :(得分:1)
如果您尝试实际运行App Initializer,请修改测试的beforeEach
方法以设置测试平台,使其类似于NgModule:
TestBed.configureTestingModule({
declarations: [],
providers: [
{
provide: APP_INITIALIZER,
useFactory: <factory function here>,
multi: true,
deps: [
<any dependencies of your initializer here>
]
}
],
imports: [
<if you use HTTP, add 'HttpClientMOdule' here>
]
});
请注意,许多人会建议使用模拟或间谍而不是您在生产中使用的实际工厂。该选择取决于您,并取决于您的特定需求。
致电configureTestingModule
之后,您还需要执行此操作(请参阅https://github.com/angular/angular/issues/24218),并将beforeEach标记为async
:
await TestBed.inject(ApplicationInitStatus).donePromise;
希望这会有所帮助!