繁体   English   中英

如何进行功能的单元测试,这取决于使用业力茉莉花的另一个功能

[英]How to do unit testing of function which is depends on another function using karma jasmine

我想测试使用其他方法jwt_decode的getTokenExpirationDate()方法,它是从jwt-decode导入的。 如何对该方法进行单元测试? 如何模拟此jwt_decode方法。

import { Injectable } from '@angular/core';
import {CanActivate, Router} from '@angular/router';
import * as jwt_decode from 'jwt-decode';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router) { }

  canActivate(): boolean {
    const token = localStorage.getItem(('loginToken'));
    if (this.isTokenExpired(token)) {
      localStorage.removeItem('loginToken');
      this.router.navigate(['/login']);
      return false;
    } else {
      return true;
    }
  }

  isTokenExpired(token: string): boolean {
    if (!token) { return true;
    } else {
      const date = this.getTokenExpirationDate(token);
      if (date === undefined) {
        return false;
      } else {
        return !(date.valueOf() > new Date().valueOf());
      }
    }
  }

  getTokenExpirationDate(token: string): Date {
    const decoded = jwt_decode(token);
    if (decoded.exp === undefined) {
      return null;
    } else {
      const date = new Date(0);
      date.setUTCSeconds(decoded.exp);
      return date;
    }
  }

}

您不嘲笑jwt_decode 您只为getTokenExpirationDate编写测试。

jwt_decode是您的公共函数的内部调用。 您可以通过为getTokenExpirationDate编写测试用例来隐式测试它。

它似乎是一个纯函数,没有副作用,可以安全使用,并且方法的行为将保持一致。

使用它,不要模拟它或为其编写单元测试。 测试您的业务逻辑,而不是您的依赖项。


而且jwt_decode已经有单元测试: https : //github.com/auth0/jwt-decode/blob/master/test/tests.js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM