繁体   English   中英

Angular2服务单元测试因TypeError失败:undefined不是对象

[英]Angular2 Service Unit Test Fails with TypeError: undefined is not an object

我正在测试我的authService。 这是完整的测试,但是Karma告诉我,authService是未定义的。 我有很多AuthService依赖的服务,但是我提供并正确注入了它们。

错误:无法解析“ AuthService”的所有参数(BackendService,Store,LoggerService,未定义,ErrorService)。 确保所有参数都用Inject修饰或具有有效的类型注释,并且'AuthService'用Injectable修饰。 在/var/folders/zb/tpysrhsx7hbg1dnsn4gwtqq00000gn/T/8715f9a6c29e748f52c8f59e3e1daae3.browserify中(第34976行)

authservice.spec.ts

import { provide } from "@angular/core";
import { AuthHttp } from "angular2-jwt";
import { HTTP_PROVIDERS, XHRBackend } from "@angular/http";
import { MockBackend } from "@angular/http/testing";
import {
    TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
    TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
} from "@angular/platform-browser-dynamic/testing";
import {
    beforeEachProviders,
    inject,
    beforeEach,
    it,
    describe,
    setBaseTestProviders
} from "@angular/core/testing";
import { Subject } from "rxjs/Subject";
import { AuthService } from "./auth.service";
import { BackendService } from "../../backend/backend.service";
import { ErrorService } from "../../error/error.service";
import { LoggerService } from "../../logger/logger.service";
import { NavService } from "../../nav/nav-service/nav.service";
import { Store } from "@ngrx/store";
import { TestComponentBuilder } from "@angular/compiler/testing";
import { ToastController, AlertController } from "ionic-angular";
setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);

describe("AuthService", () => {

    let response = new Subject();
    let tcb;
    let authService;
    let navService;
    let backendService;
    let errorService;
    let store;
    let loggerService;

    class StubErrorService extends ErrorService {
        constructor() {
            super(null, null);
        }

        toast(title) {
            console.error(title);
        }

        modal(title, subtitle) {
            console.error(title, subtitle);
        }
    }

    class StubBackendService extends BackendService {

    }

    class StubStore extends Store<any> {

    }

    class StubLoggerService extends LoggerService {

    }

    class StubNavService extends NavService {

    }

    // PROVIDE

    beforeEachProviders(() => [
        HTTP_PROVIDERS,
        provide(AuthHttp, {
            useValue: {
                get: (url: string) => {
                    return response;
                }
            }
        }),
        AuthService,
        TestComponentBuilder,
        provide(ToastController, {useClass: null}),
        provide(AlertController, {useClass: null}),
        provide(ErrorService, {useClass: StubErrorService}),
        provide(XHRBackend, {useClass: MockBackend}),
        provide(BackendService, {useClass: StubBackendService}),
        provide(Store, {useClass: StubStore}),
        provide(LoggerService, {useClass: StubLoggerService}),
        provide(NavService, {useClass: StubNavService})
    ]);

    // INJECTS

    beforeEach(inject([TestComponentBuilder, AuthService, ErrorService, BackendService, Store, LoggerService, NavService], (_tcb, as, es, bs, s, ls, ns) => {
        tcb = _tcb;
        authService = as;
        navService = ns;
        errorService = es;
        store = s;
        backendService = bs;
        loggerService = ls;
    }));

    it("should test authservice", () => {
        authService.logout();
    });
});

我不知道它是否相关,只是说我有一个几乎相同的问题,我根据有关如何测试服务的官方文档解决了它。 希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM