gpt4 book ai didi

node.js - 测试 jsonwebtoken 身份验证 express 中间件

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:48 25 4
gpt4 key购买 nike

我目前正在学习进行一般测试,但我不确定如何测试对 jsonwebtoken 进行身份验证的快速中间件。一个 express 中间件基本上是一个函数,所以理论上它应该是可单元测试的。有人可以告诉我怎么做吗?到目前为止,这是我的中间件。我目前使用 mocha 和 chai 作为我的测试框架。

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;

最佳答案

好吧,通过测试输入和输出,您可以测试一个函数。在这种情况下,req/res/next 是输入。但不是 return,而是 res.status(403).json()next() 作为中间件(或输出)的结果).

因此,通过模拟 req/res/next,您将完全控制输入和输出。如下。

describe('middleware/auth', ()=> {
let mockReq = {
headers:{} // your JWT here
}
let mockRes = {
status = function(code){return 'status${code}'}
}
let nextCalled = false;
let next = function(){nextCalled = true}

it('should pass on right jwt',()=>{
mockReq.headers['JWT'] = 'right jwt'
authenticateJwt(mockReq, mockRes, next)
expect(nextCalled).to.be.true;
})
})

但是使用像 nextCalled 这样的附加变量并不是最好的选择。 Sinon或其他 spy 可能会更好。

关于node.js - 测试 jsonwebtoken 身份验证 express 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com