Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了单元测试 – 单元测试Angular 2 authGuard;间谍方法没有被调用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试对我的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

大佬总结

以上是大佬教程为你收集整理的单元测试 – 单元测试Angular 2 authGuard;间谍方法没有被调用全部内容,希望文章能够帮你解决单元测试 – 单元测试Angular 2 authGuard;间谍方法没有被调用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。