单元测试 – 单元测试Angular 2 authGuard;间谍方法没有被调用
发布时间:2020-12-17 06:56:00 所属栏目:安全 来源:网络整理
导读:我正在尝试对我的auth警卫服务进行单元测试.从 this answer开始,我能够做到这一点,但现在当我为此进行单元测试时,它表示预期的间谍导航已被调用. 如何让我的间谍路由器在服务中用作this.router? AUTH-guard.service.ts import { Injectable } from '@angula
我正在尝试对我的auth警卫服务进行单元测试.从
this answer开始,我能够做到这一点,但现在当我为此进行单元测试时,它表示预期的间谍导航已被调用.
如何让我的间谍路由器在服务中用作this.router? AUTH-guard.service.ts import { Injectable } from '@angular/core'; import { Router,CanActivate } from '@angular/router'; @Injectable() export class AuthGuardService { constructor(private router:Router) { } public canActivate() { const authToken = localStorage.getItem('auth-token'); const tokenExp = localStorage.getItem('auth-token-exp'); const hasAuth = (authToken && tokenExp); if(hasAuth && Date.now() < +tokenExp){ return true; } this.router.navigate(['/login']); return false; } } AUTH-guard.service.spec.ts import { TestBed,async,inject } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { AuthGuardService } from './auth-guard.service'; describe('AuthGuardService',() => { let service:AuthGuardService = null; let router = { navigate: jasmine.createSpy('navigate') }; beforeEach(() => { TestBed.configureTestingModule({ providers: [ AuthGuardService,{provide:RouterTestingModule,useValue:router} ],imports: [RouterTestingModule] }); }); beforeEach(inject([AuthGuardService],(agService:AuthGuardService) => { service = agService; })); it('checks if a user is valid',() => { expect(service.canActivate()).toBeFalsy(); expect(router.navigate).toHaveBeenCalled(); }); }); 将RouterTestingModule替换为Router,如示例中所示,回答抛出模块’DynamicTestModule’导入的意外值’undefined’. 解决方法
而不是存根路由器,在router.navigate()方法上使用依赖注入和间谍:
import { TestBed,inject } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { Router } from '@angular/router'; import { AuthGuardService } from './auth-guard.service'; describe('AuthGuardService',() => { beforeEach(() => { TestBed.configureTestingModule({ providers: [AuthGuardService],imports: [RouterTestingModule] }); }); it('checks if a user is valid',// inject your guard service AND Router async(inject([AuthGuardService,Router],(auth,router) => { // add a spy spyOn(router,'navigate'); expect(auth.canActivate()).toBeFalsy(); expect(router.navigate).toHaveBeenCalled(); }) )); }); https://plnkr.co/edit/GNjeJSQJkoelIa9AqqPp?p=preview (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |