如何激活authguard的Angular单元测试?
如何对auth guard执行单元测试 我不知道怎么开始,有人能帮我吗 这是我的authguard.component:如何激活authguard的Angular单元测试?,angular,unit-testing,Angular,Unit Testing,如何对auth guard执行单元测试 我不知道怎么开始,有人能帮我吗 这是我的authguard.component: import { Injectable } from '@angular/core'; import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { LoginService } from '../ser
import { Injectable } from '@angular/core';
import {
Router,
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
import { LoginService } from '../services/login/login.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router, private loginService: LoginService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const currentUser = this.loginService.currentUserValue;
if (currentUser) {
// Authorized so return true
return !0;
}
// not authorized so redirect to signin page with the return url
this.router.navigate(['/login'], {
queryParams: { returnUrl: state.url }
});
return !1;
}
}
你需要模拟路由器和登录服务 测试可能如下所示:
describe('LoginService', () => {
let navigateMock;
let loginService: LoginService;
beforeEach(() => {
navigateMock = jest.fn();
const RouterMock: Mock<Router> = jest.fn(() => (<Router> {
navigate: navigateMock,
}));
// ...some more mocks
}
it('should redirect without error', (done: DoneCallback) => {
// mock the login method, e.g.
loginServiceMock.loadDocumentAndLogin = jest.fn(() => Promise.reject({} as OAuthErrorEvent)); // if you use OAuth
// call loginService.canActivate and expect the behaviour of the navigator
loginService.canActivate().subscribe(f => f, () => {
expect(navigateMock).toBeCalledWith(['loginerror'], {
queryParams: {
code: '',
description: ''
}
});
done();
});
});
description('LoginService',()=>{
让我们回顾一下;
let loginService:loginService;
在每个之前(()=>{
navigateMock=jest.fn();
常量RouterMock:Mock=jest.fn(()=>){
导航:navigateMock,
}));
//…再来点嘲弄
}
它('should redirect without error',(done:DoneCallback)=>{
//模拟登录方法,例如。
loginServiceMock.loadDocumentAndLogin=jest.fn(()=>Promise.reject({}作为OAuthErrorEvent));//如果使用OAuth
//调用loginService.can激活并期望导航器的行为
loginService.canActivate().subscribe(f=>f,()=>{
期望(navigateMock).toBeCalledWith(['loginerror']{
查询参数:{
代码:“”,
说明:“”
}
});
完成();
});
});