Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用sinon存根测试受中间件保护的express js路由_Node.js_Middleware_Sinon_Stub - Fatal编程技术网

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我已经编辑了这个问题来说明这一点。