UNPKG

whistle.mock-plugins

Version:

Whistle 插件,用于快速创建 API 模拟数据

120 lines (104 loc) 2.9 kB
/** * 测试 rulesServer 规则匹配功能 * * 这个文件提供了一个简单的测试用例,用于验证 rulesServer 的匹配功能 * 实际环境中,您可以运行这个测试来确认规则匹配是否按预期工作 */ // 模拟 fs-extra 模块 const fsMock = { existsSync: jest.fn().mockReturnValue(true), readJsonSync: jest.fn().mockReturnValue({ interfaces: [ { id: '1', name: '测试接口1', urlPattern: '/api/test1', httpMethod: 'GET', enabled: true }, { id: '2', name: '测试接口2', urlPattern: '/api/test2', httpMethod: 'POST', enabled: true }, { id: '3', name: '测试接口3', urlPattern: '/api/test3/*', httpMethod: 'ALL', enabled: true }, { id: '4', name: '测试接口4', urlPattern: '/api/test4', httpMethod: 'GET', enabled: false // 禁用状态 } ] }) }; // 模拟模块 jest.mock('fs-extra', () => fsMock); jest.mock('path', () => ({ join: (...args) => args.join('/') })); // 导入被测试的模块 const rulesServer = require('../lib/rules-server'); describe('rulesServer 测试', () => { let requestHandler; let req; let res; beforeEach(() => { // 模拟 server const server = { on: (event, handler) => { if (event === 'request') { requestHandler = handler; } } }; // 模拟请求和响应对象 req = { originalReq: { url: 'http://example.com/api/test1', method: 'GET' } }; res = { end: jest.fn() }; // 初始化 rulesServer rulesServer(server, {}); }); test('匹配到的URL应该返回mock-plugin规则', () => { // 测试匹配成功的情况 req.originalReq.url = 'http://example.com/api/test1'; req.originalReq.method = 'GET'; requestHandler(req, res); expect(res.end).toHaveBeenCalledWith('mock-plugins://'); }); test('未匹配的URL应该返回空字符串', () => { // 测试匹配失败的情况 req.originalReq.url = 'http://example.com/api/not-exist'; req.originalReq.method = 'GET'; requestHandler(req, res); expect(res.end).toHaveBeenCalledWith(''); }); test('禁用的接口不应该被匹配', () => { // 测试禁用接口的情况 req.originalReq.url = 'http://example.com/api/test4'; req.originalReq.method = 'GET'; requestHandler(req, res); expect(res.end).toHaveBeenCalledWith(''); }); test('通配符模式应该正确匹配', () => { // 测试通配符匹配 req.originalReq.url = 'http://example.com/api/test3/123'; req.originalReq.method = 'GET'; requestHandler(req, res); expect(res.end).toHaveBeenCalledWith('mock-plugins://'); }); });