如何在angular 7中使用Karma/Jasmine为App_Initializer编写单元测试用例



我在APP.module.ts文件中导入了APP_INITIALIZER,并调用了一个初始化器函数。

如何使用jasmine/carma为这个初始化器方法编写单元测试用例?

代码:

initializer.ts

import { CookieService } from 'ngx-cookie-service';
import { KeycloakOptions, KeycloakConfig } from 'keycloak-angular';
import { EnlivenKeycloakAuthService } from './services/enliven-keycloak-auth.service';
export function initializer(keycloakService: EnlivenKeycloakAuthService, cookieService: CookieService): () => Promise<any> {
cookieService.set('test','test');
const config: KeycloakConfig = {
url: serverUrl,
realm: realmName,
clientId: clientId,
credentials: {
secret: secret
}
};
const options: KeycloakOptions = {
config: config,
initOptions: {
onLoad: 'login-required',
checkLoginIframe: false
},
enableBearerInterceptor: true,
bearerExcludedUrls: ['/assets']
};
keycloakService.setIsClientSecretKeyFetech(true);
return (): Promise<any> => keycloakService.init(options);
}

app.module.ts

{
provide: APP_INITIALIZER,
useFactory: initializer,
deps: [ EnlivenKeycloakAuthService, CookieService],
multi: true
}

我不清楚您问题中的代码,我无法帮助您进行测试用例,但我相信这个示例会对您有所帮助。

应用程序初始值设定项.ts

import { ConfigService } from './services';
export const appInitializer: (ConfigService) => (() => Promise<boolean>) = function (config: ConfigService) {
return (): Promise<boolean> => {
return new Promise<boolean>((resolve: (boolean) => void, reject: (boolean) => void) => {
config.load().subscribe(
(data: any) => {
// do something with data and resolve the promise
resolve(true);
},
(error) => reject(error)
);
});
};
};

应用程序初始值设定项.spec.ts

import { async, TestBed } from "@angular/core/testing";
import { of } from "rxjs";
import { tap } from "rxjs/operators";
import { ConfigService } from "./services";
import { appInitializer } from "./app-initializer";
describe('appInitializer', () => {
const mockedConfigService: any = jasmine.createSpyObj('ConfigService', ['load']);
let configService: ConfigService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: ConfigService, useValue: mockedConfigService }
]
});
configService = TestBed.get(ConfigService);
});
it('should resolve the promise', async(() => {
mockedConfigService.load.and.returnValue(of({}));
appInitializer(configService)()
.then((status) => {
expect(status).toBe(true);
})
}));
it('should reject the promise', async(() => {
mockedConfigService.load.and.returnValue(
of({})
.pipe(tap(() => {
throw Error('failure');
}))
);
appInitializer(configService)()
.then(() => { }, (error) => {
expect(error.message).toEqual('failure');
})
}));
});

相关内容