【发布时间】:2021-03-13 04:07:42
【问题描述】:
我想对下面的守卫进行单元测试
resolve(): Observable < Game > {
return this.gameRoom$.pipe(
tap(data => {
this.gameService.updateGame(data);
}));
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
this.gameRoom$ = this.gameService.fetchGame(next.paramMap.get("gameId")).pipe(shareReplay());
return this.gameService.isRouteCorrectlyConfigured(state.url);
}
我已经为 CanActivate 设置了以下单元测试
it("it should not activate route", () => {
const MockSnapshot = {
url: ""
} as RouterStateSnapshot;
expect(guard.canActivate(route.snapshot, MockRouterStateSnapshot)).toBeFalsy();
});
it("it should activate route", () => {
const MockRouterStateSnapshot = {
url: "/game/someid/some-place"
} as RouterStateSnapshot;
expect(guard.canActivate(route.snapshot, MockRouterStateSnapshot)).toBeTruthy();
});
但是如何对 resolve 方法进行单元测试呢? 我像这样尝试过,但是由于 gameService 没有获取任何东西,所以 observable 不存在。测试 resolve 方法是否有意义?如何测试?
it("should resolve", () => {
guard.resolve().subscribe(data => expect(data).toBeTruthy());
});
【问题讨论】:
标签: angular unit-testing angular-routing angular-router-guards