Testowanie potoków
Potoki (pipes) są kolejnym kandydatem do tworzenia testów izolowanych, bez wykorzystania narzędzi wbudowanych w Angular'a. Mając przykładowy pipe CutWordsPipe:
import { Pipe, PipeTransform } from '@angular/core';
const SEPARATOR = ' ';
const DOTS = '...';
@Pipe({
name: 'cutWords'
})
export class CutWordsPipe implements PipeTransform {
transform(value: string, limit: number): any {
if (value.length > limit) {
let cutValue = value.substr(0, limit);
if (value.charAt(limit).localeCompare(SEPARATOR) !== 0) {
const spaceIndex = cutValue.lastIndexOf(SEPARATOR);
cutValue = value.substr(0, spaceIndex);
}
return `${cutValue}${DOTS}`;
} else {
return value;
}
}
}
Testy do takiego mechanizmu mogą wyglądać następująco:
import {CutWordsPipe} from './cut-words.pipe';
describe('CutWordsPipe', () => {
let pipe: CutWordsPipe;
beforeEach(() => {
pipe = new CutWordsPipe();
});
it('should create an instance', () => {
expect(pipe).toBeTruthy();
});
it('should return passed value when it is within given limit', () => {
expect(pipe.transform('abc', 3)).toBe('abc');
});
it('should return only dots as given word is not within given limit', () => {
expect(pipe.transform('abcdef', 5)).toBe('...');
});
it('should return shortened version of given value but only till last space within limit', () => {
expect(pipe.transform('ab cdef', 5)).toBe('ab...');
});
});