unit test services karma unit-testing angular angular2-testing angular2-pipe

unit-testing - karma - unit test angular services



Cómo burlarse de Pipe al probar un componente (3)

Burlándose de mi pipa en clase simple como

export class DateFormatPipeMock { transform() { return ''29.06.2018 15:12''; } }

y uso simple de useClass en mi archivo de especificaciones

{provide: DateFormatPipe, useClass: DateFormatPipeMock}

trabajó para mi :-)

Actualmente estoy anulando a los proveedores para usar servicios simulados como este:

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

Quiero hacer lo mismo para las tuberías que utiliza el componente. Lo intenté, provide(PipeA, { useClass: MockPipeA }) y provide(PipeA, { useValue: new MockPipeA() }) pero ambos no funcionaron.


Para tocar el tubo, use la respuesta de Dinistro. Para espiar la tubería, puedes complementar eso con lo siguiente:

let pipeSpy: jasmine.Spy; beforeEach(() => { TestBed.configureTestingModule... pipeSpy = spyOn(MockPipe.prototype, ''transform''); }; it(''should do whatever'', () => { doYourStuff(); expect(pipeSpy).toHaveBeenCalled(); }


Puedes agregar tus mockpipes en las declarations de TestBed :

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

El MockPipe necesita tener el decorador @Pipe con el nombre original.

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