[英]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.