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



我想测试getTokenExpirationDate((方法,该方法使用其他方法jwt_decode并且是从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

最新更新