Ana içeriğe geç

Angular uygulamasında bir pipe'ı test etme

Pipe'ları test etme yaklaşımı, direktiflere benzer. Pipe'ı MockBuilder metodunun ilk parametresi olarak geçiriyoruz ve varsa bağımlılıklarıyla birlikte modülünü ikinci parametre olarak gönderiyoruz:

beforeEach(() => MockBuilder(TargetPipe));
ipucu

İpucu: Pipe'ın nasıl davrandığını doğrulamak için özel bir şablon render etmemiz gerekiyor.

const fixture = MockRender(TargetPipe, {
$implicit: ['1', '3', '2'],
});

Artık neyin render edildiğini doğrulayabiliriz:

expect(fixture.nativeElement.innerHTML).toEqual('1, 2, 3');

Canlı örnek

bilgi

Ekstra Bilgi: Aşağıdaki örnek, pipe test etme sürecini daha iyi anlamanızı sağlayacaktır.

https://github.com/help-me-mom/ng-mocks/blob/master/examples/TestPipe/test.spec.ts
import { Pipe, PipeTransform } from '@angular/core';

import { MockBuilder, MockRender, ngMocks } from 'ng-mocks';

// Bir dizi string kabul eden, bunları sıralayan
// ve değerlerin birleştirilmiş stringini döndüren basit bir pipe.
@Pipe({
name: 'target',
})
class TargetPipe implements PipeTransform {
public transform(value: string[], asc = true): string {
let result = [...(value || [])].sort();
if (!asc) {
result = result.reverse();
}

return result.join(', ');
}
}

describe('TestPipe', () => {
ngMocks.faster(); // birden fazla test için aynı TestBed.

// Pipe'ı test etmek istediğimiz için, MockBuilder'ın ilk
// parametresi olarak geçiyoruz. İkinci parametreyi atlayabiliriz,
// çünkü bağımlılık yok.
// MockBuilder'ın promise'ini döndürmeyi unutmayın.
beforeEach(() => MockBuilder(TargetPipe));

it('stringleri sıralar', () => {
const fixture = MockRender(TargetPipe, {
$implicit: ['1', '3', '2'],
});

expect(fixture.nativeElement.innerHTML).toEqual('1, 2, 3');
});

it('parametreye göre stringleri ters çevirir', () => {
const fixture = MockRender('{{ values | target:flag }}', {
flag: false,
values: ['1', '3', '2'],
});

expect(fixture.nativeElement.innerHTML).toEqual('3, 2, 1');
});
});