web-dev-qa-db-fra.com

Tube à essai avec dépendances sur les services

J'ai un tuyau qui désinfecte le HTML comme ci-dessous:

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

}

Je veux le tester comme ci-dessous:

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

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

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

DomSanatizer est une classe abstraite qui est câblée automatiquement par TypeScript en la passant dans un constructeur:

constructor(private _sanitizer: DomSanitizer) {}

Actuellement, j'obtiens l'erreur TypeScript:

Impossible de créer une instance de la classe abstraite 'DomSanitizer'.

Quelqu'un sait-il ce que fait TypeScript lors de l'instanciation de dépendances transmises à un constructeur dans Angular? Ou quelle est la façon de tester quelque chose comme ça?

20
Ben Taliadoros

En raison de l'ID dans votre canal, vous devez configurer un environnement de test (banc d'essai) pour résoudre la dépendance:

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