2017-03-06 9 views
3

現在、一般的なテストを行うことを学んでおり、jsonwebtokenを認証する高速ミドルウェアをどのようにテストするのかよくわかりません。高速ミドルウェアは基本的には関数なので、理論上は単体テスト可能でなければなりません。誰かがそうする方法を私に見せてもらえますか?ここまでは私のミドルウェアです。私は現在、テストフレームワークとしてmochaとchaiを使用しています。jsonwebtoken認証エクスプレスミドルウェアのテスト

import jwt from "jsonwebtoken"; 
import secret from "../jwtSecret" 

function authenticateJwt(req, res, next){ 
    let token; 
    let authorizationHeaders = req.headers["authorization"]; 
    if(authorizationHeaders){ 
    token = authorizationHeaders.split(" ")[1]; 
    } 
    if(token) { 
    jwt.verify(token, secret, (err, decodedToken) => { 
     if(err){ 
     res.status(403).json({ 
      success: false, 
      error: "Invalid token provided" 
     }); 
     } else { 
     next(); 
     } 
    }); 
    } else { 
    res.status(403).json({ 
     success: false, 
     error: "No token provided" 
    }); 
    } 
} 

export default authenticateJwt; 

答えて

2

まあ、入力と出力をテストすることで、関数をテストできます。この場合、req/res/nextは入力です。ただし、returnの代わりに、res.status(403).json()next()がミドルウェア(または出力)の結果として表示されます。

req/res/nextをモックすることで、入力と出力を完全に制御できます。続くように。

しかし、nextCalledのような追加の変数を使用するのは最良の選択ではありません。 Sinonまたは他のスパイが良いかもしれません。

+0

この機能をテストするには、どのライブラリを使用する必要がありますか?現在のところ、私のテストランナーとしてmochaを使用し、アサーションのためにチャイのみを使用しています。私は本当にシノンのような別の図書館を習う必要はありません。これらのライブラリを使用せずに現在の機能をテストすることは可能ですか? – Nate

+0

私は私の例ではsinonを使用しませんでした。だからもちろん、そのようにテストすることはできます。 sinonのようなスパイは、私の例のnext()のように、関数が呼び出されているかどうかを簡単にチェックできるようにしています。しかし最初はモカとチャイを使うだけでいい。 – YLS

関連する問題