Quellcode durchsuchen

fix: refresh claimable practice records on show

Developer vor 1 Woche
Ursprung
Commit
193d60ff4a
2 geänderte Dateien mit 66 neuen und 3 gelöschten Zeilen
  1. 4 3
      pagesMy/practice.vue
  2. 62 0
      tests/practice-page-refresh.test.js

+ 4 - 3
pagesMy/practice.vue

@@ -51,7 +51,8 @@
 	import CusHeader from '@/components/CusHeader/index.vue'
 	import PageEmpty from '@/components/pageEmpty/index.vue'
 	import PracticeBox from '@/components/pages/practiceBox/index.vue'
-	import { ref, getCurrentInstance, onMounted } from 'vue'
+	import { ref, getCurrentInstance } from 'vue'
+	import { onShow } from '@dcloudio/uni-app'
 	const { proxy } = getCurrentInstance()
 	
 	const pb = ref(184)
@@ -190,7 +191,7 @@
 		})
 	}
 	
-	onMounted(()=>{
+	onShow(()=>{
 		try{
 			queryParams.value.userId = JSON.parse(uni.getStorageSync('userInfo')).id;
 			getMemberList();
@@ -335,4 +336,4 @@
 			bottom: 64rpx;
 		}
 	}
-</style>
+</style>

+ 62 - 0
tests/practice-page-refresh.test.js

@@ -0,0 +1,62 @@
+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 practiceFile = path.resolve('pagesMy/practice.vue')
+
+const flushPromises = () => new Promise(resolve => setImmediate(resolve))
+
+function mountPracticePage () {
+  const source = fs.readFileSync(practiceFile, 'utf8')
+  const script = source.match(/<script setup[^>]*>([\s\S]*?)<\/script>/)[1]
+    .replace(/^\s*import\s+.*$/gm, '')
+
+  const lifecycle = {}
+  const requests = []
+  const api = {
+    get (url, params) {
+      requests.push({ url, params: { ...params } })
+      if (url === '/core/family/member/page') {
+        return Promise.resolve({ data: { code: 0, data: { list: [{ id: 'member-1', name: '小明' }] } } })
+      }
+      return Promise.resolve({ data: { code: 0, data: { list: [] } } })
+    },
+    post () {
+      return Promise.resolve({ data: { code: 0, data: {} } })
+    }
+  }
+
+  vm.runInNewContext(script, {
+    ref: value => ({ value }),
+    getCurrentInstance: () => ({ proxy: { $api: api, $showToast: () => {} } }),
+    onMounted: callback => { lifecycle.mounted = callback },
+    onShow: callback => { lifecycle.show = callback },
+    uni: {
+      getStorageSync: key => key === 'userInfo' ? JSON.stringify({ id: 'user-1' }) : '',
+      navigateTo: () => {}
+    },
+    Date,
+    console
+  })
+
+  return { lifecycle, requests }
+}
+
+test('申领社会实践记录页面每次显示时重新查询可申领数据', async () => {
+  const { lifecycle, requests } = mountPracticePage()
+
+  assert.equal(typeof lifecycle.show, 'function', '页面必须注册 onShow 刷新处理')
+  lifecycle.show()
+  await flushPromises()
+  await flushPromises()
+
+  assert.deepEqual(requests.map(item => item.url), [
+    '/core/family/member/page',
+    '/core/social/practice/record/claimPage'
+  ])
+  assert.equal(requests[1].params.userId, 'user-1')
+  assert.equal(requests[1].params.memberId, 'member-1')
+  assert.equal(requests[1].params.page, 1)
+})