У меня есть маршрут, который мне нужен, чтобы запретить доступ студентам.Я пытаюсь написать модульный тест для этого, но он не работает.
Мои модульные тесты для самого сторожа работают, однако, когда я пытаюсь написать тест, который переходит к / классу метода canActivateна страже не вызывается.
Вот охранник:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const user = StoreActions.User.getCurrentUser(store.getState());
if(!user) {
this.router.navigate(['/pages/login']);
return false;
}
if(user.username.match(/\d/) !== null) {
this.router.navigate(['/home']);
return false;
}
return true;
}
И тест:
it(
'should activate guard when a student tries to access /class',
fakeAsync(
inject([StudentGuard], (guard: StudentGuard) => {
const spy = spyOn(guard, 'canActivate');
store.dispatch(StoreActions.User.setCurrentUser(TestObjects.User.Student));
router.navigate(['/class/1']);
tick();
expect(spy).toHaveBeenCalled();
discardPeriodicTasks();
})
)
);
Вот конкретный маршрут:
{
path: '',
children: {
path: 'class',
loadChildren: './components/class/class.module#ClassModule',
canActivate: [StudentGuard]
}
}
Оператор expect
не пройден в тесте.Тем не менее, если я на самом деле выдаю себя за студента, а затем перехожу в / класс в браузере, защита работает, как и ожидалось, но не активируется в тесте.Как я могу активировать его в тесте?