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...');
  });
});

results matching ""

    No results matching ""