首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用角7中的Karma/Jasmine编写App_Initializer单元测试用例

如何使用角7中的Karma/Jasmine编写App_Initializer单元测试用例
EN

Stack Overflow用户
提问于 2019-02-06 07:34:46
回答 1查看 3.4K关注 0票数 2

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

如何使用茉莉花/业力为这个初始化方法编写单元测试用例?

代码:

initializer.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    provide: APP_INITIALIZER,
    useFactory: initializer,
    deps: [ EnlivenKeycloakAuthService, CookieService],
    multi: true
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-12 10:01:48

您问题中的代码对我来说并不清楚,我无法帮助您完成测试用例,但我相信这个示例会帮助您。

app-initializer.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
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');
            })
    }));
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54548642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档