Я пытаюсь протестировать Angular Resolver, который получает доступ к дочерним маршрутам param.
Моя защита работает нормально, но я не могу легко создать модульный тест, потому что я не могу создать ActivatedRouteSnapshot
с дочерними маршрутами (свойство только для чтения).
Мой преобразователь
@Injectable({
providedIn: 'root'
})
export class MyResolverGuard implements Resolve<string> {
constructor() {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): string {
return route.firstChild.paramMap.get('my-param');
}
}
Мой тест:
it('should resolve chilren route params', () => {
guard = TestBed.get(MyResolverGuard);
const route = new ActivatedRouteSnapshot();
// Cannot assign children because it's a read only property
route.children = [...];
const myResolverParams = guard.resolve(route, null);
});
Есть ли другие способы, кроме использования макета ActivatedRouteSnapshot
?
Хорош ли мой подход к тестовой защите?
Спасибо, что поделились своей стратегией.
ActivatedRouteSnapshot
? - person Erbsenkoenig   schedule 05.08.2019ActivatedRouteSnapshot
. Например, маршрутыchildren
будут устанавливать свойствоfirstChild
. Мой подход может быть неправильным, я просто хотел найти альтернативу, чем насмешки. - person Martin Choraine   schedule 05.08.2019router.navigate()
. Как вы заметили, имитируя объект ActivatedRouteSnapshot, вы не можете манипулировать свойствами, доступными только для чтения. ActivatedRouteSnapshot представляет снимок/состояние объекта ActivatedRoute в момент времени. - person terahertz   schedule 05.08.2019router.navigate()
для фиктивного маршрута в RouterTestModule, который также определен с помощью Guard, позволит внедренному ActivatedrouteSnapshot Guard иметь различные свойства только для чтения (например, firstChild, Children, pathFromRoot), которые в противном случае были бы нулевыми. в издевательском объектеnew ActivatedRouteSnapshot()
. Я понятия не имею, как работает ваша защита, поэтому я не могу предоставить примеры кода. Опубликуйте больше примеров кода (например, как выглядят ваши маршруты), если вы думаете, что это поможет людям понять ваш контекст и ответить на ваш вопрос... - person terahertz   schedule 05.08.2019