Spec-Zone.ru › Angular

Тестирование каналов

Каналы можно тестировать без утилит тестирования Angular.

Тестирование TitleCasePipe

У класса канала есть один метод, transform, который преобразует входное значение в выходное. Реализация transform редко взаимодействует с DOM. Большинство каналов не зависят от Angular, за исключением метаданных @Pipe и интерфейса.

Рассмотрим TitleCasePipe, который переводит первую букву каждого слова в верхний регистр. Вот реализация с регулярным выражением.

import {Pipe, PipeTransform} from '@angular/core';

@Pipe({name: 'titlecase', pure: true})
/** Transform to Title Case: uppercase the first letter of the words in a string. */
export class TitleCasePipe implements PipeTransform {
  transform(input: string): string {
    return input.length === 0
      ? ''
      : input.replace(/\w\S*/g, (txt) => txt[0].toUpperCase() + txt.slice(1).toLowerCase());
  }
}

Всё, где используются регулярные выражения, стоит тщательно тестировать. Чтобы проверить ожидаемые и граничные случаи, можно применять стандартные методы модульного тестирования.

describe('TitleCasePipe', () => {
  // This pipe is a pure, stateless function so no need for BeforeEach
  const pipe = new TitleCasePipe();

  it('transforms "abc" to "Abc"', () => {
    expect(pipe.transform('abc')).toBe('Abc');
  });

  it('transforms "abc def" to "Abc Def"', () => {
    expect(pipe.transform('abc def')).toBe('Abc Def');
  });

  // ... more tests ...
});

Написание DOM-тестов для поддержки тестирования канала

Эти тесты проверяют канал изолированно. Они не позволяют определить, правильно ли работает TitleCasePipe при использовании в компонентах приложения.

Рассмотрите возможность добавления тестов компонентов, например такого:

it('should convert hero name to Title Case', async () => {
  // get the name's input and display elements from the DOM
  const hostElement: HTMLElement = harness.routeNativeElement!;
  const nameInput: HTMLInputElement = hostElement.querySelector('input')!;
  const nameDisplay: HTMLElement = hostElement.querySelector('span')!;

  // simulate user entering a new name into the input box
  nameInput.value = 'quick BROWN  fOx';

  // Dispatch a DOM event so that Angular learns of input value change.
  nameInput.dispatchEvent(new Event('input'));

  // Wait for Angular to update the display binding through the title pipe
  await harness.fixture.whenStable();

  expect(nameDisplay.textContent).toBe('Quick Brown  Fox');
});

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/guide/testing/pipes

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API