| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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)
- })
|