Node.js 使用sinon存根测试受中间件保护的express js路由
我正在为受中间件保护的路由编写测试,我想使用Node.js 使用sinon存根测试受中间件保护的express js路由,node.js,middleware,sinon,stub,Node.js,Middleware,Sinon,Stub,我正在为受中间件保护的路由编写测试,我想使用sinon.stub替换中间件身份验证,但当我运行测试时,我可以看到存根被忽略。我已经试过了,但我总是犯同样的错误 这是中间件: exports.isAdmin = (req, res, next) => { const payload = req.decoded; console.log("Role: ", payload.user.role); if (payload && payload.us
sinon.stub
替换中间件身份验证,但当我运行测试时,我可以看到存根被忽略。我已经试过了,但我总是犯同样的错误
这是中间件:
exports.isAdmin = (req, res, next) => {
const payload = req.decoded;
console.log("Role: ", payload.user.role);
if (payload && payload.user.role === "Admin") {
next();
} else {
return res.status(403).send("Access denied.");
}
};
测试文件:
import chai from "chai";
import chaiHttp from "chai-http";
import sinon from "sinon";
import { country } from "./addcountry-data";
let server;
let auth;
chai.should();
const { expect } = chai;
chai.use(chaiHttp);
describe("Admin user can add country", () => {
beforeEach(() => {
auth = require("../../../middlewares/isAdmin");
sinon.stub(auth, "isAdmin").callsFake((req, res, next) => {
console.log("Stubbed");
return next();
});
server = require("../../../app");
});
afterEach(() => {
auth.isAdmin.restore();
});
it("should allow user with admin role add a country", done => {
chai
.request(server)
.post("/api/v1/admin/addcountry")
.send(country)
.end((err, res) => {
expect(res).to.have.status(201);
done();
});
});
});
使用中间件的路径:
import { Router } from "express";
import adminController from "../controllers/addCountry";
import loggedIn from "../middlewares/loggedIn";
import auth from "../middlewares/isAdmin";
const router = Router();
router.post("/admin/addcountry", auth.isAdmin, adminController.addCountry);
export default router;
错误消息:
TypeError: Cannot read property 'user' of undefined
at exports.isAdmin (C:\Users\user\code-jammers-backend\src\middlewares\isAdmin.js:2:276)
任何帮助都将不胜感激。谢谢。如何导入和使用中间件?请提供代码。@slideshowp2我已经编辑了这个问题来说明这一点。