UNPKG

tedi

Version:

Express wrappper written in typescript with dependency injection capabilities

152 lines (151 loc) 5.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const request = require("supertest-as-promised"); const express = require("express"); describe("Express app", () => { let userRouter; let infoRouter; let app; let controller; beforeEach(() => { userRouter = express.Router(); infoRouter = express.Router(); app = express(); controller = { fn: (req, res, next) => { res.status(200).send("ok"); }, }; let controllerWrapper = (req, res, next) => { controller.fn(req, res, next); }; infoRouter.route("/").get(controllerWrapper); userRouter.route("/").get(controllerWrapper); userRouter.use("/info", infoRouter); app.use("/user", userRouter); }); describe("when error handlers are chained in the app", () => { let response; beforeEach((done) => { app .use("/user/info", (err, req, res, next) => { err.$handlers.push("info error handler"); next(err); }) .use("/user", (err, req, res, next) => { err.$handlers.push("user error handler"); next(err); }) .use((err, req, res, next) => { err.$handlers.push("app error handler"); res.status(500).send(err.$handlers); }); spyOn(controller, "fn").and.callFake((req, res, next) => { next({ $handlers: [] }); }); request(app) .get("/user/info") .expect(500) .then((res) => { response = res; done(); }) .catch((error) => done.fail(error)); }); it("should have transversed all the error handlers", () => { expect(JSON.parse(response.text)).toEqual([ "info error handler", "user error handler", "app error handler", ]); }); }); describe("when error handlers are setted in the routers", () => { let response; let infoFlag = false; let userFlag = false; let rootFlag = false; beforeEach((done) => { infoRouter.use((err, req, res, next) => { infoFlag = true; next(err); }); userRouter.use((err, req, res, next) => { userFlag = true; next(err); }); app.use((err, req, res, next) => { rootFlag = true; res.status(500).send(err.$handlers); }); spyOn(controller, "fn").and.callFake((req, res, next) => { next(new Error("Custom")); }); request(app) .get("/user/info") .expect(500) .then((res) => { response = res; done(); }) .catch((error) => done.fail(error)); }); it("should have transversed all the error handlers", () => { expect(rootFlag).toBeTruthy(); expect(userFlag).toBeTruthy(); expect(infoFlag).toBeTruthy(); }); }); describe("when filters are setted in the routers", () => { let response; let infoFlag = false; let userFlag = false; let rootFlag = false; beforeEach((done) => { userRouter = express.Router(); infoRouter = express.Router(); app = express(); controller = { fn: (req, res, next) => { res.status(200).send("ok"); }, }; let controllerWrapper = (req, res, next) => { controller.fn(req, res, next); }; infoRouter.route("/").get(controllerWrapper); userRouter.use((req, res, next) => { userFlag = true; next(); }); userRouter.route("/").get(controllerWrapper); userRouter.use("/info", infoRouter); app.use((req, res, next) => { rootFlag = true; next(); }); app.use("/user", userRouter); infoRouter.use((req, res, next) => { infoFlag = true; next(); }); spyOn(controller, "fn").and.callFake((req, res, next) => { res.status(200).send("OK"); }); request(app) .get("/user/info") .expect(200) .then((res) => { response = res; done(); }) .catch((error) => done.fail(error)); }); it("should have called root filter", () => { expect(rootFlag).toBeTruthy(); }); it("should have called user filter", () => { expect(userFlag).toBeTruthy(); }); }); });