1

我目前正在一个 express webapp 上修补 sinon/mocha/chai。我正在尝试验证身份验证是否以这样的方式正常工作,即我让身份验证中间件正常运行并阻止请求,在另一次运行时,我存根中间件函数并让带有附加信息的请求通过。

基本上我的设置如下所示:

带有要存根的函数的helper.js

var helper = {};

helper.verifyAuthCookie = function(req, res, next) {
  if (req.signedCookies.auth) {
    jwt.verify(req.signedCookies.auth, "secret", {
      subject: "a",
      issuer: "b",
      audience: "c"
    }, function(err, decoded) {
      if (decoded) {
        req.user = {
          authenticated: true
        };
      } else {
        req.user = {
          authenticated: false
        };
      }
      next();
    });
  } else {
    req.user = {
      authenticated: false
    };
    next();
  }
};

module.exports = helper;

测试.js

var helper=require("helper.js");
describe("get unauthenticated", function() {
  it("should fail", function(done) {
    chai.request(server.app)
      .get("/queries")
      .end(function(err, res) {
        expect(err)
          .to.not.be.null;
        expect(res.status)
          .to.be.equal(401);
        done();
      });
  });
});
describe("get unauthenticated", function() {
  var verifyCookieStub;
  beforeEach(function() {
    verifyCookieStub = sandbox.stub(helper, "verifyAuthCookie", function(req, res, next) {
      req.user = {
        authenticated: true
      }
      next();
    });
  });
  afterEach(function() {
    sinon.assert.calledOnce(verifyCookieStub);
    verifyCookieStub.restore();
  });
  it("should not fail", function(done) {
    chai.request(server.app)
      .get("/queries")
      .end(function(err, res) {
        expect(err)
          .to.be.null;
        expect(res.status)
          .to.be.equal(200);
        done();
      });
  });
});

在 express 网络应用 server.js 中

const express = require("express");
const helper = require("./helper.js");
app = express();
app.use(helper.verifyAuthCookie);

app.get("/queries", function(req, res) {
  res.send(req.user.authenticated);
});

现在的问题是,第一个测试成功但第二个和 afterEach 断言都失败了,这表明存根没有正常工作。

在互联网上搜索时,我发现有人在做非常相似的事情,而且他的工作似乎很好。他的Github 回购

我完全错过了什么吗?

4

0 回答 0