Модульное тестирование службы Angular с зависимостью Router: "TypeError: Невозможно прочитать свойство 'navigate' of undefined" - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь протестировать простой сервис, который использует Маршрутизатор как зависимость и записывает все маршруты в массив истории. Я более или менее использую сервис, описанный в этом руководстве .

Я испробовал все решения, которые я мог найти в документации Angular.io. Я попробовал несколько решений здесь, на StackOverflow. Я даже пытался добавить маршруты к фиктивным компонентам, объявив их и добавив их в RouterTestingModule.withRoutes(). По какой-то причине router во всех случаях равно undefined.

describe('Route State service', () => {
    let routeStateService: RouteStateService;
    let router: Router;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [RouterTestingModule],
            providers: [RouteStateService]
        });

        router = TestBed.get(Router);
        routeStateService = TestBed.get(RouteStateService);
        router.initialNavigation();
    });

    describe('should add each route to history', () => {
        router.navigate(['/test']);
        expect(routeStateService.history.length).toBeGreaterThan(0);
    });

});

Ошибка довольно прямолинейна, но по какой-то причине я не могу определить «маршрутизатор» обычным способом. Чего мне не хватает?

1 Ответ

1 голос
/ 18 октября 2019

Я думаю, что вы должны использовать it вместо describe

it('should add each route to history', () => {
        router.navigate(['/test']);
        expect(routeStateService.history.length).toBeGreaterThan(0);
    });

, а также использовать fakeAsync, поскольку маршрутизация асинхронна

it('navigate to "/test" redirects you to /test', fakeAsync(() => { 
  router.navigate(['/test']); 
  tick(); 
  expect(location.path()).toBe('/test'); 
}));

вы можете иметь некоторые ссылкиздесь https://codecraft.tv/courses/angular/unit-testing/routing/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...