2016-09-02 21 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不幸的是,這對我來說並不是一個高優先級的問題,但我會盡快用新的測試API再試一次,也許現在有一個解決方法。 – harunurhan

+0

任何解決方案呢?我試圖不聲明原始管道,而是創建一個模擬管道並聲明它。但不知何故,管道渲染結果總是顯示一個空字符串'' – zhumingvictor

回答

14

可以在TestBeddeclarations添加mockpipes:

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

有沒有辦法用茉莉花來監視嘲弄的管道?我試圖嘲弄翻譯管道,並檢查它是用正確的翻譯鍵調用。 – Looted

1

要存根管,請使用Dinistro的答案。窺視管,你可補充下列要求:

let pipeSpy: jasmine.Spy; 

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

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

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

    expect(pipeSpy).toHaveBeenCalled(); 
}