From dbaf6c2783975c3d5a47c4e8925c2e6ccf7d2c64 Mon Sep 17 00:00:00 2001 From: ljluestc Date: Sat, 29 Nov 2025 10:14:46 -0800 Subject: [PATCH] fix tests --- server/middleware/mockServer.js | 5 +- server/utils/commonMock.js | 84 +++++++++++++++++++++++++++++++++ server/utils/commons.js | 3 +- test/commonMock.test.js | 49 +++++++++++++++++++ 4 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 server/utils/commonMock.js create mode 100644 test/commonMock.test.js diff --git a/server/middleware/mockServer.js b/server/middleware/mockServer.js index b188fea451..9dfc462d7e 100755 --- a/server/middleware/mockServer.js +++ b/server/middleware/mockServer.js @@ -158,10 +158,7 @@ module.exports = async (ctx, next) => { paths.splice(0, 3); path = '/' + paths.join('/'); - ctx.set('Access-Control-Allow-Origin', header.origin); - ctx.set('Access-Control-Allow-Credentials', true); - - // ctx.set('Access-Control-Allow-Origin', '*'); + commonMock.setCommonResponseHeaders(ctx, header.origin); if (!projectId) { return (ctx.body = yapi.commons.resReturn(null, 400, 'projectId不能为空')); diff --git a/server/utils/commonMock.js b/server/utils/commonMock.js new file mode 100644 index 0000000000..5c3fdab31a --- /dev/null +++ b/server/utils/commonMock.js @@ -0,0 +1,84 @@ +const Mock = require('mockjs'); + +/** + * Common Response Headers + * Define headers that should be applied to responses + */ +exports.commonResponseHeaders = { + 'Access-Control-Allow-Credentials': true, + 'Access-Control-Max-Age': 1728000, + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, HEADER, PATCH, OPTIONS' +}; + +/** + * Set common response headers to context + * @param {Object} ctx Koa context + * @param {String} origin Origin header + */ +exports.setCommonResponseHeaders = (ctx, origin) => { + ctx.set('Access-Control-Allow-Origin', origin); + ctx.set('Access-Control-Allow-Credentials', true); + // You can uncomment or add more common headers here if needed + // Object.keys(exports.commonResponseHeaders).forEach(key => { + // ctx.set(key, exports.commonResponseHeaders[key]); + // }); +}; + +/** + * Common Mock Utilities + * reusable mock methods + */ +exports.mockUtils = { + /** + * Standard success response wrapper + * @param {Any} data Response data + * @param {String} msg Message + */ + success: (data, msg = 'success') => { + return { + code: 0, + msg: msg, + data: data + }; + }, + + /** + * Standard error response wrapper + * @param {Number} code Error code + * @param {String} msg Error message + */ + fail: (code = 400, msg = 'fail') => { + return { + code: code, + msg: msg + }; + }, + + /** + * Mock a standard list response + * @param {Array} list Data list + * @param {Number} total Total count + */ + page: (list, total) => { + return { + code: 0, + msg: 'success', + data: { + list: list, + total: total || list.length + } + }; + }, + + /** + * Mock a random user + */ + mockUser: () => { + return Mock.mock({ + 'id': '@id', + 'name': '@cname', + 'email': '@email', + 'avatar': '@image("200x200")' + }); + } +}; diff --git a/server/utils/commons.js b/server/utils/commons.js index c16d4cc18a..89b4e71c55 100755 --- a/server/utils/commons.js +++ b/server/utils/commons.js @@ -623,7 +623,8 @@ exports.handleMockScript = async function (script, context) { resHeader: context.resHeader, httpCode: context.httpCode, delay: context.httpCode, - Random: Mock.Random + Random: Mock.Random, + utils: commonMock.mockUtils }; sandbox.cookie = {}; diff --git a/test/commonMock.test.js b/test/commonMock.test.js new file mode 100644 index 0000000000..73c8c7ea59 --- /dev/null +++ b/test/commonMock.test.js @@ -0,0 +1,49 @@ +const test = require('ava'); +const commonMock = require('../server/utils/commonMock.js'); + +test('commonResponseHeaders keys check', t => { + t.truthy(commonMock.commonResponseHeaders['Access-Control-Allow-Credentials']); + t.truthy(commonMock.commonResponseHeaders['Access-Control-Max-Age']); +}); + +test('setCommonResponseHeaders sets headers on ctx', t => { + const ctx = { + headers: {}, + set: function(key, value) { + this.headers[key] = value; + } + }; + + commonMock.setCommonResponseHeaders(ctx, 'http://localhost:3000'); + + t.is(ctx.headers['Access-Control-Allow-Origin'], 'http://localhost:3000'); + t.is(ctx.headers['Access-Control-Allow-Credentials'], true); +}); + +test('mockUtils.success returns correct structure', t => { + const res = commonMock.mockUtils.success({ id: 1 }); + t.is(res.code, 0); + t.is(res.msg, 'success'); + t.deepEqual(res.data, { id: 1 }); +}); + +test('mockUtils.fail returns correct structure', t => { + const res = commonMock.mockUtils.fail(500, 'server error'); + t.is(res.code, 500); + t.is(res.msg, 'server error'); +}); + +test('mockUtils.page returns correct structure', t => { + const list = [1, 2, 3]; + const res = commonMock.mockUtils.page(list, 10); + t.is(res.code, 0); + t.deepEqual(res.data.list, list); + t.is(res.data.total, 10); +}); + +test('mockUtils.mockUser returns valid mock data', t => { + const user = commonMock.mockUtils.mockUser(); + t.truthy(user.id); + t.truthy(user.name); + t.truthy(user.email); +});