gpt4 book ai didi

node.js - 在快速中间件内没有调用Sinon spy

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:47 24 4
gpt4 key购买 nike

我目前正在学习测试 jwt 身份验证快速中间件。我的下一个回调正在被调用,因为我在那里放置了一个 console.log 但我的 sinon spy 断言失败了。

有人可以看一下这个案例吗?

这是我的测试用例

  it("should call next when the token provided is valid", () => {
let token = jwt.sign({}, process.env.JWT);
let request = httpMocks.createRequest({
headers: {
Authorization: `Bearer ${token}`
}
});
const next = sinon.spy();
authenticateJwt(request, response, next);
expect(next.calledOnce).to.be.true;
});

这是我的中间件

import jwt from "jsonwebtoken";

export default function(req, res, next){
const authorizationHeaders = req.headers["authorization"];
let token;

if(authorizationHeaders){
token = authorizationHeaders.split(" ")[1];
}

if(token){
jwt.verify(token, process.env.JWT, (err, decodedToken) => {
if(err){
res.status(401).json({
message: "invalid token provided"
});
} else {
res.user = decodedToken;
console.log("called");
next();
}
});
} else {
res.status(401).json({
success: false,
message: "no token provided"
});
}
}

我的 console.log 正在正确记录,但 sinon 断言失败。

最佳答案

您的期望可能发生得太早了。在断言回调已经发生之前,您不会等待回调发生。

在此示例中,您可能根本不需要 sinon,这应该适合您:

it("should call next when the token provided is valid", () => {
let token = jwt.sign({}, process.env.JWT);
let request = httpMocks.createRequest({
headers: {
Authorization: `Bearer ${token}`
}
});
return authenticateJwt(request, response, () => {
// Do assertions in here
});
});

也许更好的格式化方法是:

describe('authenticateJwt middleware', () => {
let nextCalled = false;

before(() => {
let token = jwt.sign({}, process.env.JWT);
let request = httpMocks.createRequest({
headers: {
Authorization: `Bearer ${token}`
}
});
return authenticateJwt(request, response, () => {
nextCalled = true;
});
})

it("should call next when the token provided is valid", () => expect(nextCalled).to.be.true);
});

这使您的断言更加灵活。如果由于某种原因未调用它,它还确保它会失败。

关于node.js - 在快速中间件内没有调用Sinon spy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42782523/

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