![](/img/trans.png)
[英]Unit Testing Troubleshoot in Karma-Jasmine for .sort() function in Angular
[英]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.