【发布时间】:2023-04-07 03:33:02
【问题描述】:
这是一个重要的问题,我如何为这个 Guard 进行单元测试,这样做的目的是如果我通过了身份验证,然后返回 false 并重定向到登录,如果我们返回登录并且如果我们之前已经过身份验证,然后转到个人资料页面,如果这是我们第一次登录,那么继续前进,为什么?因为我不想去那个路由(回调页面)在这种情况下路由它来自外部服务(okta)的回调这是守卫的代码:
import { Injectable } from '@angular/core';
import { LoginMineService } from '../login/login-mine.service';
import { Router } from '@angular/router';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoginCheckGuard implements CanActivate {
constructor(private loginMineService: LoginMineService,
private router: Router,
) {
}
canActivate(): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
if (!this.loginMineService.isAuthenticated) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
}
这是单元测试代码:
import { TestBed } from '@angular/core/testing';
import { LoginCheckGuard } from './login-check.guard';
describe('LoginCheckGuard', () => {
let guard: LoginCheckGuard;
beforeEach(() => {
TestBed.configureTestingModule({});
guard = TestBed.inject(LoginCheckGuard);
});
it('should be created', () => {
expect(guard).toBeTruthy();
});
});
PS:我正在开发 Angular 9,谢谢大家
【问题讨论】:
标签: angular unit-testing karma-jasmine