簡體   English   中英

沒有@Inject,Angular2 TestBed找不到嵌套的提供者

[英]Angular2 TestBed can't find nested provider without @Inject

我有以下要測試的服務:

import { Injectable } from "@angular/core";

import DepA from "./dep-a"

@Injectable()
export default class TestService {
    private readonly DepA: DepA;

    public constructor(depA: DepA) {
        this.DepA = depA;
    }
}

它依賴於另一個名為DepA的服務:

import { Injectable } from "@angular/core";

@Injectable()
export default class DepA {
}

我現在想要為TestService創建一個單元測試,具體如下:

import { async, inject, TestBed } from '@angular/core/testing';

import DepA from "./dep-a";
import TestService from "./test-service";

class MockDepA {
}

describe("TestService", () => {
    beforeEach(() => {
        let dep = new DepA();

        TestBed.configureTestingModule({
            providers: [
                TestService,
                { provide: DepA, useValue: dep },
            ]
        });
    });

    it('should construct', inject(
        [TestService], (testService: TestService) => {
            expect(testService).toBeDefined();
        }));
});

這給了我以下錯誤:

$ ./node_modules/karma/bin/karma start karma.conf.js
Chrome 55.0.2883 (Windows 10 0.0.0) TestService should construct FAILED
        Error: Can't resolve all parameters for TestService: (?).
Chrome 55.0.2883 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) (0.033 secs / 0.021 secs)

當我將TestService的構造函數從public constructor(depA: DepA) {更改為public constructor(@Inject(DepA) depA: DepA) {似乎工作正常。 我有什么理由在單元測試中用@Inject()注釋我的注射,但是在正常情況下它沒有用嗎?

這可能不是人們正在尋找的答案; 但我改寫了我的調試環境,使得輸出現在是多個.spec.js文件,而不是使用Karma Typescript預處理器。 我不確定為什么它不起作用; 只有這樣,它確實為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM