UNPKG

rerumaccusamus

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

152 lines (128 loc) 4.15 kB
import path from 'path'; import { serverManager } from '@modern-js/server-core'; import request from 'supertest'; // import type { Context } from 'egg'; import plugin from '../src/plugin'; import { APIPlugin } from './helpers'; import './common'; jest.setTimeout(60000); describe('register middleware', () => { let runner: any; const pwd = path.join(__dirname, './fixtures/function-mode'); beforeAll(async () => { serverManager.usePlugin(APIPlugin, plugin); runner = await serverManager.init({}); }); beforeEach(() => { jest.resetModules(); }); test('should support add by function', async () => { const foo = 'foo'; const middleware1 = jest.fn(() => async (ctx: any, next: any) => { await next(); ctx.body = foo; }); const middleware2 = jest.fn(() => async (ctx: any, next: any) => { await next(); }); const apiHandler = await runner.prepareApiServer({ pwd, mode: 'function', config: { middleware: [middleware1, middleware2, middleware2] }, }); const res = await request(apiHandler).get('/user'); expect(middleware1.mock.calls.length).toBe(1); expect(middleware2.mock.calls.length).toBe(2); expect(res.status).toBe(200); expect(res.text).toEqual(foo); }); test('should support add by string', async () => { const foo = 'foo'; const middleware1 = jest.fn(() => async (ctx: any, next: any) => { await next(); ctx.body = foo; }); const middleware2 = jest.fn(() => async (ctx: any, next: any) => { await next(); }); const mock_middleware1 = middleware1; jest.mock( path.resolve(__dirname, './fixtures/middlewares/middleware1'), () => ({ __esModule: true, default: mock_middleware1, }), ); const mock_middleware2 = middleware2; jest.mock( path.resolve(__dirname, './fixtures/middlewares/middleware2'), () => ({ __esModule: true, default: mock_middleware2, }), ); const apiHandler = await runner.prepareApiServer({ pwd, mode: 'function', config: { middleware: [ require.resolve('./fixtures/middlewares/middleware1'), require.resolve('./fixtures/middlewares/middleware2'), require.resolve('./fixtures/middlewares/middleware2'), ], }, }); const res = await request(apiHandler).get('/user'); expect(middleware1.mock.calls.length).toBe(1); expect(middleware2.mock.calls.length).toBe(2); expect(res.status).toBe(200); expect(res.text).toEqual(foo); }); test(`support config`, async () => { const foo = 'foo'; const options1 = { foo: 1 }; const options2 = { bar: 2 }; const finalOptions = Object.create(null); const middleware1 = jest.fn(options => async (ctx: any, next: any) => { Object.assign(finalOptions, options); ctx.body = foo; await next(); }); const middleware2 = jest.fn(options => async (ctx: any, next: any) => { await next(); Object.assign(finalOptions, options); }); const mock_middleware1 = middleware1; jest.mock( path.resolve(__dirname, './fixtures/middlewares/middleware1'), () => ({ __esModule: true, default: mock_middleware1, }), ); const mock_middleware2 = middleware2; jest.mock( path.resolve(__dirname, './fixtures/middlewares/middleware2'), () => ({ __esModule: true, default: mock_middleware2, }), ); const apiHandler = await runner.prepareApiServer({ pwd, mode: 'function', config: { middleware: [ [require.resolve('./fixtures/middlewares/middleware1'), options1], [require.resolve('./fixtures/middlewares/middleware2'), options2], ], }, }); const res = await request(apiHandler).get('/user'); expect(middleware1.mock.calls.length).toBe(1); expect(middleware2.mock.calls.length).toBe(1); expect(finalOptions.foo).toBe(options1.foo); expect(finalOptions.bar).toBe(options2.bar); expect(res.status).toBe(200); }); });