使用Karma-Jasmine进行Angular应用初始化

时间:2018-12-15 05:14:48

标签: angular jasmine karma-jasmine

我们有一个使用SystemJS的旧Angular 4项目。我们被要求使用Jasmine和Karma实施单元测试用例。我开始为一个组件编写一个测试套件。看起来像这样(下面的伪代码):

beforeEach(async(() => {
     TestBed.configureTestingModule(
                imports,
                providers,
                declarations etc.
            ).compileComponents();
}));

APP_INITIALIZER中有很多初始化代码,可以在应用程序中设置各种状态(例如参考数据,配置,用户信息)。为了使测试用例顺利运行,我们需要运行初始化代码。知道如何实现吗?

1 个答案:

答案 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;

希望这会有所帮助!