practice-page-refresh.test.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import test from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import fs from 'node:fs'
  4. import path from 'node:path'
  5. import vm from 'node:vm'
  6. const practiceFile = path.resolve('pagesMy/practice.vue')
  7. const flushPromises = () => new Promise(resolve => setImmediate(resolve))
  8. function mountPracticePage () {
  9. const source = fs.readFileSync(practiceFile, 'utf8')
  10. const script = source.match(/<script setup[^>]*>([\s\S]*?)<\/script>/)[1]
  11. .replace(/^\s*import\s+.*$/gm, '')
  12. const lifecycle = {}
  13. const requests = []
  14. const api = {
  15. get (url, params) {
  16. requests.push({ url, params: { ...params } })
  17. if (url === '/core/family/member/page') {
  18. return Promise.resolve({ data: { code: 0, data: { list: [{ id: 'member-1', name: '小明' }] } } })
  19. }
  20. return Promise.resolve({ data: { code: 0, data: { list: [] } } })
  21. },
  22. post () {
  23. return Promise.resolve({ data: { code: 0, data: {} } })
  24. }
  25. }
  26. vm.runInNewContext(script, {
  27. ref: value => ({ value }),
  28. getCurrentInstance: () => ({ proxy: { $api: api, $showToast: () => {} } }),
  29. onMounted: callback => { lifecycle.mounted = callback },
  30. onShow: callback => { lifecycle.show = callback },
  31. uni: {
  32. getStorageSync: key => key === 'userInfo' ? JSON.stringify({ id: 'user-1' }) : '',
  33. navigateTo: () => {}
  34. },
  35. Date,
  36. console
  37. })
  38. return { lifecycle, requests }
  39. }
  40. test('申领社会实践记录页面每次显示时重新查询可申领数据', async () => {
  41. const { lifecycle, requests } = mountPracticePage()
  42. assert.equal(typeof lifecycle.show, 'function', '页面必须注册 onShow 刷新处理')
  43. lifecycle.show()
  44. await flushPromises()
  45. await flushPromises()
  46. assert.deepEqual(requests.map(item => item.url), [
  47. '/core/family/member/page',
  48. '/core/social/practice/record/claimPage'
  49. ])
  50. assert.equal(requests[1].params.userId, 'user-1')
  51. assert.equal(requests[1].params.memberId, 'member-1')
  52. assert.equal(requests[1].params.page, 1)
  53. })