Jest Mock an Express Middleware

Viewed 219

I am trying to test the following Express route which uses serveFiles as middleware.

import { serveFiles, setup } from 'swagger-ui-express';

export default (app: Express) => {
    app.use('/api-docs/private', serveFiles(yamlFile), setup()
};

I attempted to simply mock the unit test but am getting a res.send is undefined error message

jest.mock('swagger-ui-express', () => ({
  setup: jest.fn(),
  serveFiles: jest.fn(),
}));

const app = express();
app.use(express.json());

describe('Test Private Route', () => {
    beforeAll(() => {
      jest.clearAllMocks();

      const mockServe = swaggerUi.serveFiles;
      (mockServe as jest.Mock).mockImplementation((req, res, next) => {
        res.send({ message: 'test private' });
        next();
      });
      swagger(app);
    });

    it('should retrieve something on private endpoint', async () => {
      const resp = await request(app).get('/api-docs/private');
      expect(resp.body).toEqual({ message: 'test private' });
    });

How can I mock serveFiles so it returns resp.body?

0 Answers
Related