Ich lerne derzeit, eine JWT-Authentifizierung Express-Middleware zu testen. Mein nächster Rückruf wird angerufen, weil ich dort eine console.log
gesetzt habe, aber meine sinon Spion Behauptung ist fehlgeschlagen.Sinon Spion nicht in einer Express-Middleware
Kann jemand diesen Fall betrachten?
Dies ist mein Testfall
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;
});
Und hier ist meine Middleware
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"
});
}
}
Mein console.log
einloggt richtig, aber die Sinon Behauptung versagt.
Welche Art von Behauptungen kann ich hier tun? Ich bin immer noch neu im Testen. Ich möchte nur testen, dass die Callback-Funktion aufgerufen wird. – Nate
Ich habe die Antwort bearbeitet, um eine Alternative mit einer Beispielaussage zu geben – Varedis
Vielen Dank! Das funktioniert. – Nate