Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何激活authguard的Angular单元测试?_Angular_Unit Testing - Fatal编程技术网

如何激活authguard的Angular单元测试?

如何激活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

如何对auth guard执行单元测试

我不知道怎么开始,有人能帮我吗

这是我的authguard.component:

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']{
查询参数:{
代码:“”,
说明:“”
}
});
完成();
});
});