我目前正在使用快速网络应用程序修补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;
test.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();
});
});
});
并在快递网络应用服务器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 Repo
我完全错过了什么吗?