2016-09-02 2 views
9

Derzeit bin ich zwingende Anbieter verspottet Dienstleistungen wie diese verwenden:Wie Rohr spotten, wenn Bauteilprüfung

beforeEach(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { 
    tcb.overrideProviders(AddFieldToObjectDropdownComponent, 
     [ 
      provide(ServiceA, { useClass: MockServiceA })), 
      provide(ServiceB, { useClass: MockServiceB })) 
     ])... 

ich gleiche Sache für Rohre tun wollen, dass die Komponente verwendet. Ich habe versucht, provide(PipeA, { useClass: MockPipeA }) und provide(PipeA, { useValue: new MockPipeA() }), aber beide haben nicht funktioniert.

TestBed.configureTestingModule({ 
      declarations: [ 
       AppComponent, 
       MockPipe 
      ], 
      ... 

Die MockPipe Bedürfnisse haben die @Pipe Dekorateur mit dem ursprünglichen Namen:

+0

Es ist nicht vielversprechend, wenn Sie keine Antworten in 4 Monaten gehabt haben. Hast du das jemals herausgefunden? – coblr

+0

@cobblr Nein, leider war es kein Problem mit hoher Priorität für mich, aber ich werde es bald wieder mit der neuen Test API versuchen, vielleicht gibt es jetzt eine Arbeit. – harunurhan

+0

Irgendeine Lösung? Ich habe versucht, die Original-Pipe nicht zu deklarieren und stattdessen eine Mock-Pipe zu erstellen und sie zu deklarieren. Aber irgendwie zeigt das Pipe gerenderte Ergebnis immer eine leere Zeichenkette. – zhumingvictor

Antwort

14

Sie können Ihre mockpipes im declarations des TestBed hinzuzufügen.

import {Pipe, PipeTransform} from '@angular/core'; 

@Pipe({name: 'pipename'}) 
class MockPipe implements PipeTransform { 
    transform(value: number): number { 
     //Do stuff here, if you want 
     return value; 
    } 
} 
+3

Gibt es eine Möglichkeit, die verspottete Pfeife mit Jasmine auszuspionieren? Ich versuche, die Pipeline zu überspielen und zu überprüfen, ob sie mit dem richtigen Übersetzungsschlüssel aufgerufen wurde. – Looted

1

Um die Leitung zu stubben, verwenden Sie die Antwort von Dinistro. Um das Rohr auszuspionieren, können Sie das mit dem folgenden ergänzen:

let pipeSpy: jasmine.Spy; 

beforeEach(() => { 
    TestBed.configureTestingModule... 

    pipeSpy = spyOn(MockPipe.prototype, 'transform'); 
}; 

it('should do whatever',() => { 
    doYourStuff(); 

    expect(pipeSpy).toHaveBeenCalled(); 
} 
Verwandte Themen