Как протетсировать relative router.navigate?

Для тестирования relative router.navigate в Angular можно использовать специальный инструментарий для тестирования, такой как TestBed и RouterTestingModule.

Прежде всего, необходимо настроить тестовую среду с помощью TestBed и RouterTestingModule. Это позволит нам имитировать маршрутизатор и среду Angular в нашем тесте.

Вот пример настройки тестовой среды:

import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';

beforeEach(async () => {
  await TestBed.configureTestingModule({
    imports: [
      RouterTestingModule
    ],
    [другие зависимости или компоненты]
  }).compileComponents();
});

Затем мы можем получить доступ к маршрутизатору через инъекцию зависимостей и протестировать relative router.navigate. Давайте рассмотрим два возможных сценария тестирования: переход по абсолютному и относительному пути.

Первый сценарий - переход по абсолютному пути:

import { Router } from '@angular/router';

it('should navigate to absolute path', () => {
  const router = TestBed.inject(Router);
  const navigateSpy = spyOn(router, 'navigate');

  // выполнение действия, которое вызывает router.navigate
  // например: component.onNavigate();

  expect(navigateSpy).toHaveBeenCalledWith(['/absolute-path']);
});

Второй сценарий - переход по относительному пути:

import { Router } from '@angular/router';

it('should navigate to relative path', () => {
  const router = TestBed.inject(Router);
  const navigateSpy = spyOn(router, 'navigate');

  // выполнение действия, которое вызывает router.navigate
  // например: component.onNavigate();

  expect(navigateSpy).toHaveBeenCalledWith(['relative-path'], { relativeTo: activatedRoute });
});

В этом примере мы используем spyOn для отслеживания вызовов метода navigate и убеждаемся, что он был вызван с ожидаемыми аргументами. Для относительного пути мы также указываем activatedRoute в качестве опции relativeTo, чтобы указать относительный путь.

Таким образом, используя TestBed и RouterTestingModule, мы можем настроить тестовую среду и проверить, что переходы по относительным путям корректно обрабатываются при вызове router.navigate. Это поможет нам убедиться, что маршрутизация в нашем приложении работает правильно.