簡體   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