我们有一个使用SystemJS的遗留Angular 4项目。我们被要求使用Jasmine和Karma实现单元测试用例。我开始为一个组件编写测试套件。它看起来像这样(下面的伪代码):
beforeEach(async(() => {
TestBed.configureTestingModule(
imports,
providers,
declarations etc.
).compileComponents();
}));我们在APP_INITIALIZER中有很多初始化代码,用于在应用程序中设置各种状态(例如参考数据、配置、用户信息)。为了让测试用例顺利运行,我们需要运行初始化代码。你知道如何实现这一点吗?
发布于 2020-04-02 01:01:55
如果您正在尝试实际运行您的应用程序初始化器,请修改测试的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;希望这能有所帮助!
https://stackoverflow.com/questions/53789741
复制相似问题