我该如何测试canActivate函数的角度返回函数 哪个会返回布尔值?。
Authgurad.ts: 从'@ angular / core'导入{Injectable,OnInit,EventEmitter,Output,Directive}; 从'@ angular / router'导入{CanActivate,ActivatedRouteSnapshot,Router,RouterStateSnapshot}; 从'rxjs'导入{Observable}; 从“ ../../environments/environment”导入{环境}; 从“ ../services/http.service”导入{HttpService}; 从'angular-oauth2-oidc'导入{OAuthService}; 从“ ../services/oauth2-odic.service”导入{OAuth2OdicService}; 从“ ../services/session.storage.service”导入{SessionStorageService};
@Directive({
selector: '[AuthGuard]',
host: {},
providers: []
})
@Injectable()
export class AuthGuard implements CanActivate {
public accessToken: string;
@Output() valueChange = new EventEmitter();
constructor(
private sessionStorageService: SessionStorageService,
private oauthService: OAuth2OdicService,
private router: Router,
private httpService: HttpService) {
}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
return new Promise<boolean>((resolve, reject) => {
const canAuthenticate = (route.fragment !== null && !!route.fragment);
if (!canAuthenticate && !sessionStorage.getItem('id_token')) {
this.login();
reject(false);
} else {
const accessToken = this.getQueryParam(route.fragment, 'access_token');
const idToken = this.getQueryParam(route.fragment, 'id_token');
const tokenType = this.getQueryParam(route.fragment, 'token_type');
if (accessToken && idToken && tokenType) {
this.sessionStorageService.setItem('id_token', idToken);
this.sessionStorageService.setItem('access_token', accessToken);
this.sessionStorageService.setItem('token_type', tokenType);
resolve(true);
this.router.navigate(['/search']);
} else {
if (sessionStorage.getItem('access_token') && sessionStorage.getItem('id_token')) {
resolve(true);
this.router.navigate(['/search']);
}
}
}
});
}
private login() {
this.httpService.getConfigurations().subscribe(data => {
const redirectUri = window.location.origin;
const clientId = data.clientId;
const loginUrl = data.authenticationUrl ;
const accessToken = this.oauthService.initImplicitFlow(loginUrl + '?', clientId, redirectUri + '/');
});
}
private getQueryParam(queryString: string, paramName: string) {
if (queryString && paramName) {
const expression = new RegExp(`${paramName}=([^&]*)`);
const results = queryString.match(expression);
return results[1] ? results[1] : '';
}
}
}