我目前正在一个 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 回购
我完全错过了什么吗?