18

angular サービスの単体テストをしようとすると問題が発生します。このサービスが、挿入された別のサービスを適切に呼び出していることを確認したいと考えています。

ServiceInjected を注入するこの ServiceToTest があるとします。

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();
    }));

テストが陽性であることを期待していましたが、次のエラーが表示されます。

spy configure が呼び出されたと予想されます。

一方、注入されたサービスを次のように public に設定すると、問題なく動作します。

private _si: ServiceInjected by public si: ServiceInjected
4

4 に答える 4