2016-09-02 7 views
9

В настоящее время я переопределение поставщиков использовать издевались услуги, как это:Как издеваются трубы при тестировании компонента

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

Я хочу сделать то же самое для труб, которые используют компонент. Я пробовал, provide(PipeA, { useClass: MockPipeA }) и provide(PipeA, { useValue: new MockPipeA() }) но оба не работали.

+0

Это не обещает, если у вас не было ответов через 4 месяца. Вы когда-нибудь это понимали? – coblr

+0

@coblr нет, к сожалению, это не было проблемой с высоким приоритетом для меня, но я попробую еще раз с новым Test API, возможно, сейчас есть работа. – harunurhan

+0

Любое решение еще? Я попытался не объявить исходную трубку и вместо этого создать макет трубы и объявить ее. Но каким-то образом результат, полученный обработкой, всегда показывает пустую строку '' – zhumingvictor

ответ

14

Вы можете добавить mockpipes в declarations в TestBed:

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

В MockPipe потребности иметь @Pipe декоратора с оригинальным названием.

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

Есть ли способ шпионить за издевавшейся трубой с помощью Jasmine? Я пытаюсь переделать перевод трубы и проверить, что он был вызван с правильным ключом перевода. – Looted

1

Чтобы заглушить трубу, используйте ответ Динистро. Чтобы шпионить за трубой, вы можете дополнить это следующим образом:

let pipeSpy: jasmine.Spy; 

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

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

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

    expect(pipeSpy).toHaveBeenCalled(); 
}