import test from 'node:test' import assert from 'node:assert/strict' import fs from 'node:fs' import path from 'node:path' import vm from 'node:vm' const detailFile = path.resolve('pagesHome/activityDetail.vue') const dateFormatFile = path.resolve('common/utils/dateFormat.js') function loadActivityDetail (activityOverrides = {}) { const source = fs.readFileSync(detailFile, 'utf8') const start = source.indexOf('\tconst getActivityDetail = (id) => {') const end = source.indexOf('\n\twatch(()=>userStore.token', start) assert.notEqual(start, -1, '应找到活动详情加载方法') assert.notEqual(end, -1, '应找到活动详情加载方法的结束位置') const activityInfo = { value: {} } const posterData = { title: '默认标题', time: '默认时间', address: '默认地址', organizer: '默认组织者', mainImg: '默认封面' } const response = { code: 0, data: { id: 'activity-1', activityName: '测试活动', activityStartTime: '2026-10-12 09:30:00', activityEndTime: '2026-10-13 18:05:00', signupStartTime: '2026-10-01 09:00:00', signupEndTime: '2026-10-11 18:00:00', provinceName: '广东省', cityName: '深圳市', address: '测试地址', channelName: '测试机构', coverFile: 'cover.png', signupState: 0, activeState: 1, recruitmentNow: 0, recruitmentMax: 10, imageFiles: '', ...activityOverrides } } const context = { activityInfo, posterData, shareADId: { value: '' }, imgList: { value: [] }, avatars: { value: [] }, proxy: { $api: { get: () => Promise.resolve({ data: response }) }, $showToast: () => {} }, uni: { showModal: () => {}, reLaunch: () => {} }, console } vm.createContext(context) vm.runInContext(fs.readFileSync(dateFormatFile, 'utf8'), context) vm.runInContext(`${source.slice(start, end)}\nthis.getActivityDetail = getActivityDetail`, context) return { getActivityDetail: context.getActivityDetail, activityInfo, posterData } } test('海报使用接口原始活动时间生成有效的月日和时分', async () => { const { getActivityDetail, activityInfo, posterData } = loadActivityDetail() getActivityDetail('activity-1') await new Promise(resolve => setImmediate(resolve)) assert.equal(activityInfo.value.activityStartTime, '2026年10月12日 09:30') assert.equal(activityInfo.value.activityEndTime, '2026年10月13日 18:05') assert.equal(posterData.time, '10.12-09:30 ~ 10.13-18:05') }) test('活动时间无效时海报显示时间待定且不残留示例时间', async () => { const { getActivityDetail, posterData } = loadActivityDetail({ activityStartTime: '2026-02-31 09:30:00', activityEndTime: '2026-03-01 18:00:00' }) getActivityDetail('activity-1') await new Promise(resolve => setImmediate(resolve)) assert.equal(posterData.time, '时间待定') assert.equal(posterData.time.includes('NaN'), false) })