У меня есть следующие службы я хочу тест:Angular2 TestBed не может найти вложенную поставщика без @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()
в своих модульных тестах, но это нормально работает при нормальных обстоятельствах?
Я проверил ваш код, и он отлично подходит для меня с последней версией ng-cli. –
Я также проверил свой код на семестре быстрого запуска (https://github.com/angular/quickstart), и, похоже, он действительно работает отлично. Поэтому я думаю, что проблема связана с проблемой файла конфигурации. Проблема, скорее всего, связана с тем, что я использую webpack; Мне очень нужно настраивать различные среды производства и выпуска. Я отвечу здесь, если я это выясню. Мой karma.conf.js можно найти по адресу http://pastebin.com/prcnsjVR, а также по адресу webpack.conf.js по адресу http://pastebin.com/T28GJMGN. – Shammah