web-dev-qa-db-ja.com

サービスに依存するテストパイプ

私は以下のようにHTMLを浄化するパイプを持っています:

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';

@Pipe({
    name: 'sanitiseHtml'
})

export class SanitiseHtmlPipe implements PipeTransform {

constructor(private _sanitizer: DomSanitizer) {}

    transform(value: any): any {
      return this._sanitizer.bypassSecurityTrustHtml(value);
    }

}

以下のようにテストしたい:

describe('Pipe: Sanatiser', () => {
    let pipe: SanitiseHtmlPipe;

    beforeEach(() => {
        pipe = new SanitiseHtmlPipe(new DomSanitizer());
    });

    it('create an instance', () => {
        expect(pipe).toBeTruthy();
    }); 
});

DomSanatizerは、コンストラクターに渡すことによりTypeScriptによって自動配線される抽象クラスです。

constructor(private _sanitizer: DomSanitizer) {}

現在、TypeScriptエラーが発生します。

抽象クラス「DomSanitizer」のインスタンスを作成できません。

誰かがAngularのコンストラクタに渡された依存関係をインスタンス化するときにTypeScriptが何をするか知っていますか?または、このようなものをテストする方法は何ですか?

20
Ben Taliadoros

パイプ内のDIのため、依存関係を解決するためにテスト環境(テストベッド)を構成する必要があります。

import { BrowserModule, DomSanitizer } from '@angular/platform-browser';
import { inject, TestBed } from '@angular/core/testing';

describe('SanitiseHtmlPipe', () => {
  beforeEach(() => {
    TestBed
      .configureTestingModule({
        imports: [
          BrowserModule
        ]
      });
  });

  it('create an instance', inject([DomSanitizer], (domSanitizer: DomSanitizer) => {
    let pipe = new SanitiseHtmlPipe(domSanitizer);
    expect(pipe).toBeTruthy();
  })); 
});
33
Jota.Toledo