Skip to content

Instantly share code, notes, and snippets.

@joewebber
Created September 8, 2025 18:33
Show Gist options
  • Select an option

  • Save joewebber/a9b2e271bb3076c07248048ddc8c25bb to your computer and use it in GitHub Desktop.

Select an option

Save joewebber/a9b2e271bb3076c07248048ddc8c25bb to your computer and use it in GitHub Desktop.
Mocking Express middleware using Sinon
import express from "express";
import middleware from "./middleware.js";
const app = express();
const PORT = 3000;
app.use(express.json());
app.use((req, res, next) => {
middleware.checkAuthHeader(req, res, next);
});
app.get("/", async (req, res) => {
return res.status(200).json({ success: true });
});
if (process.env.NODE_ENV !== "test") {
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
}
import { describe, it, beforeEach, afterEach } from "node:test";
import assert from "node:assert";
import request from "supertest";
import sinon from "sinon";
import app from "./app.js";
import middleware from "./middleware.js";
describe("Endpoint tests", () => {
const middlewareStub = sinon.stub(middleware, "checkAuthHeader");
beforeEach(() => {
middlewareStub.callsFake((_, __, next) => {
next();
});
});
afterEach(async () => {
middlewareStub.reset();
});
it("should return 200", async () => {
await request(app)
.get("/")
.expect(200)
.then((response) => {
assert.deepStrictEqual(response.body, {
success: true,
});
});
});
});
const SECRET_KEY = process.env.SECRET_KEY;
const checkAuthHeader = (req, res, next) => {
const authHeader = req.headers["authorization"];
const token = authHeader && authHeader.split(" ")[1];
if (!token) return res.status(401).send();
if (token !== SECRET_KEY) return res.status(401).send();
next();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment