Как написать блок тестов для App_Initializer, используя Karma / Jasmine in angular 7 - PullRequest
0 голосов
/ 06 февраля 2019

Я импортировал APP_INITIALIZER в мой файл app.module.ts и вызываю функцию инициализатора.

Как написать пример модульного теста для этого метода инициализатора, используя jasmine / karma?

Код:

initializer.ts

import {CookieService} из 'ngx-cookie-service';import {KeycloakOptions, KeycloakConfig} из 'keycloak-angular';import {EnlivenKeycloakAuthService} из './services/enliven-keycloak-auth.service';инициализатор функции экспорта (keycloakService: EnlivenKeycloakAuthService, cookieService: CookieService): () => Promise {

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

{предоставить: APP_INITIALIZER, useFactory: инициализатор, deps: [EnlivenKeycloakAuthService, CookieService], multi: true},

1 Ответ

0 голосов
/ 12 июля 2019

Код в вашем вопросе мне не понятен, и я не смог помочь вам с тестовым примером для него, но я уверен, что этот пример поможет вам.

app-initializer.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)
            );
        });
    };
};

app-initializer.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');
            })
    }));
});
...