Я столкнулся с отсутствием сообщений <router-outlet>
в других модульных тестах, но для того, чтобы иметь хороший изолированный пример, я создал AuthGuard, который проверяет, зарегистрирован ли пользователь для определенных действий.Как проверить маршрутизатор Angular2.navigate?
Это код:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (!this.authService.isLoggedIn()) {
this.router.navigate(['/login']);
return false;
}
return true;
}
Теперь я хочу написать модульный тест для этого.
Это, как я начинаю мой тест:
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([
{
path: 'login',
component: DummyComponent
}
])
],
declarations: [
DummyComponent
],
providers: [
AuthGuardService,
{
provide: AuthService,
useClass: MockAuthService
}
]
});
});
Я создал DummyComponent, который ничего не делает. Теперь мой тест. Притворись, что служба возвращает ложь, и что это вызывает this.router.navigate(['/login'])
:
it('should not let users pass when not logged in',(): void => {
expect(authGuardService.canActivate(<any>{}, <any>{})).toBe(false);
});
Это сгенерирует исключение с «Не удается найти первичный выход для загрузки». Очевидно, я могу использовать toThrow()
вместо toBe(false)
, но это не похоже на очень разумное решение. Поскольку я тестирую службу здесь, нет шаблона, где я могу поместить тег <router-outlet>
. Я мог бы издеваться над маршрутизатором и сделать свою собственную навигационную функцию, но тогда в чем смысл RouterTestingModule? Возможно, вы даже хотите проверить работу навигации.
Привет, вы можете предоставить свой spec-файл защиты входа. Было бы полезно начать писать для него тестовые примеры. –
Для чего это стоит, я разделяю ваше разочарование. Не удается найти один пример «RouterTestingModule», который действительно работает ... –