У меня проблема с попыткой модульного тестирования службы angular. Я хочу убедиться, что эта служба правильно вызывает другую введенную в нее службу.
Допустим, у меня есть этот ServiceToTest, который вводит ServiceInjected:
ServiceToTest .service.ts
@Injectable()
export class ServiceToTest {
constructor(private _si: ServiceInjected) {}
public init() {
this._si.configure();
}
}
ServiceInjected.service.ts
@Injectable()
export class ServiceInjected {
constructor() {}
public configure() {
/*Some actions*/
}
}
С помощью этих сервисов я пишу свой модульный тест:
const serviceInjectedStub = {
configure(): void {}
}
describe('ServiceToTest service Test', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ServiceToTest ,
{ provide: ServiceInjected, useValue: serviceInjectedStub }]
});
});
it('should be initialize the service injected', inject([ServiceToTest],
(tService: ServiceToTest) => {
spyOn(serviceInjectedStub, 'configure');
tService.init();
expect(serviceInjectedStub.configure).toHaveBeenCalled();
}));
Я ожидал, что мой тест будет положительным, но получаю следующую ошибку:
Ожидается, что будет вызвана шпионская конфигурация.
С другой стороны, все будет нормально, если я установлю внедренную службу как общедоступную:
private _si: ServiceInjected by public si: ServiceInjected
new ServiceToTest(stub)
для тестирования службы. Или используйте useFactory, как описано в проблеме. - person JB Nizet   schedule 22.12.2017