提交 c93a4067 编写于 作者: DCloud-WZF's avatar DCloud-WZF :speech_balloon:

refactor(reactivity): watchPostEffect

上级 7097ede7
...@@ -512,6 +512,11 @@ export default { ...@@ -512,6 +512,11 @@ export default {
name: 'watchEffect', name: 'watchEffect',
url: 'watch-effect/watch-effect' url: 'watch-effect/watch-effect'
}, },
{
id: 'watch-post-effect',
name: 'watchPostEffect',
url: 'watch-post-effect/watch-post-effect'
},
] ]
} }
] as Page[] ] as Page[]
......
const PAGE_PATH = '/pages/composition-api/reactivity/watch-post-effect/watch-post-effect' const PAGE_PATH = '/pages/reactivity/core/watch-post-effect/watch-post-effect'
describe('watchPostEffect', () => { describe('watchPostEffect', () => {
const isWeb = process.env.uniTestPlatformInfo.startsWith('web')
let page = null let page = null
const platformInfo = process.env.uniTestPlatformInfo.toLowerCase()
const isAndroid = platformInfo.startsWith('android')
const isIos = platformInfo.startsWith('ios')
const isWeb = platformInfo.startsWith('web')
beforeAll(async () => { beforeAll(async () => {
page = await program.reLaunch(PAGE_PATH) page = await program.reLaunch(PAGE_PATH)
await page.waitFor('view') await page.waitFor('view')
}) })
it('count', async () => { it('count', async () => {
const count = await page.$('#count') const count = await page.$('#count')
expect(await count.text()).toBe('count: 0') expect(await count.text()).toBe('0')
// watch // watch
const watchCountRes = await page.$('#watch-count-res') const watchCountRes = await page.$('#watch-count-res')
expect(await watchCountRes.text()).toBe( expect(await watchCountRes.text()).toBe(
'watch count result: count: 0, count ref text: count: 0') 'count: 0, count ref text: 0')
// track // track
const watchCountTrackNum = await page.$('#watch-count-track-num') const watchCountTrackNum = await page.$('#watch-count-track-num')
if (process.env.uniTestPlatformInfo.startsWith('android')) { if (isAndroid) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 3') expect(await watchCountTrackNum.text()).toBe('3')
} else if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { } else if (isIos) {
// TODO: 确认 IOS 的差异是否正常 // TODO: 确认 IOS 的差异是否正常
expect(await watchCountTrackNum.text()).toBe('watch count track number: 8') expect(await watchCountTrackNum.text()).toBe('8')
} else { } else {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 3') expect(await watchCountTrackNum.text()).toBe('3')
} }
const watchCountCleanupRes = await page.$('#watch-count-cleanup-res') const watchCountCleanupRes = await page.$('#watch-count-cleanup-res')
// TODO web端自动化测试text方法应使用textContent获取内容来保留空格,目前text方法未保留首尾空格 if (isAndroid || isWeb) {
expect(await watchCountCleanupRes.text()).toBe(isWeb ? 'watch count cleanup result:' : expect(await watchCountCleanupRes.text()).toBe('')
'watch count cleanup result: ') }
if (isIos) {
expect(await watchCountCleanupRes.text()).toBe(null)
}
// watch count and obj.num // watch count and obj.num
const watchCountAndObjNumRes = await page.$('#watch-count-obj-num-res') const watchCountAndObjNumRes = await page.$('#watch-count-obj-num-res')
expect(await watchCountAndObjNumRes.text()).toBe('watch count and obj.num result: count: 0, obj.num: 0') expect(await watchCountAndObjNumRes.text()).toBe('count: 0, obj.num: 0')
const incrementBtn = await page.$('#increment-btn') const incrementBtn = await page.$('.increment-btn')
await incrementBtn.tap() await incrementBtn.tap()
expect(await count.text()).toBe('count: 1') expect(await count.text()).toBe('1')
expect(await watchCountRes.text()).toBe( expect(await watchCountRes.text()).toBe(
'watch count result: count: 1, count ref text: count: 1') 'count: 1, count ref text: 1')
if (process.env.uniTestPlatformInfo.startsWith('android')) { if (isAndroid) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 3') expect(await watchCountTrackNum.text()).toBe('3')
} else if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { } else if (isIos) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 16') expect(await watchCountTrackNum.text()).toBe('16')
} else { } else {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 6') expect(await watchCountTrackNum.text()).toBe('6')
} }
expect(await watchCountCleanupRes.text()).toBe('watch count cleanup result: watch count cleanup: 1') expect(await watchCountCleanupRes.text()).toBe('watch count cleanup: 1')
expect(await watchCountAndObjNumRes.text()).toBe('watch count and obj.num result: count: 1, obj.num: 0') expect(await watchCountAndObjNumRes.text()).toBe('count: 1, obj.num: 0')
await incrementBtn.tap() await incrementBtn.tap()
expect(await count.text()).toBe('count: 2') expect(await count.text()).toBe('2')
expect(await watchCountRes.text()).toBe( expect(await watchCountRes.text()).toBe(
'watch count result: count: 2, count ref text: count: 2') 'count: 2, count ref text: 2')
if (process.env.uniTestPlatformInfo.startsWith('android')) { if (isAndroid) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 3') expect(await watchCountTrackNum.text()).toBe('3')
} else if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { } else if (isIos) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 24') expect(await watchCountTrackNum.text()).toBe('24')
} else { } else {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 9') expect(await watchCountTrackNum.text()).toBe('9')
} }
expect(await watchCountCleanupRes.text()).toBe('watch count cleanup result: watch count cleanup: 2') expect(await watchCountCleanupRes.text()).toBe('watch count cleanup: 2')
expect(await watchCountAndObjNumRes.text()).toBe('watch count and obj.num result: count: 2, obj.num: 0') expect(await watchCountAndObjNumRes.text()).toBe('count: 2, obj.num: 0')
// stop watch // stop watch
const stopWatchCountBtn = await page.$('#stop-watch-count-btn') const stopWatchCountBtn = await page.$('.stop-watch-count-btn')
await stopWatchCountBtn.tap() await stopWatchCountBtn.tap()
await incrementBtn.tap() await incrementBtn.tap()
expect(await count.text()).toBe('count: 3') expect(await count.text()).toBe('3')
expect(await watchCountRes.text()).toBe( expect(await watchCountRes.text()).toBe(
'watch count result: count: 2, count ref text: count: 2') 'count: 2, count ref text: 2')
if (process.env.uniTestPlatformInfo.startsWith('android')) { if (isAndroid) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 3') expect(await watchCountTrackNum.text()).toBe('3')
} else if (process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { } else if (isIos) {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 24') expect(await watchCountTrackNum.text()).toBe('24')
} else { } else {
expect(await watchCountTrackNum.text()).toBe('watch count track number: 9') expect(await watchCountTrackNum.text()).toBe('9')
} }
expect(await watchCountCleanupRes.text()).toBe('watch count cleanup result: watch count cleanup: 2') expect(await watchCountCleanupRes.text()).toBe('watch count cleanup: 2')
expect(await watchCountAndObjNumRes.text()).toBe('watch count and obj.num result: count: 3, obj.num: 0') expect(await watchCountAndObjNumRes.text()).toBe('count: 3, obj.num: 0')
}) })
it('obj', async () => { it('obj', async () => {
const objStr = await page.$('#obj-str') const objStr = await page.$('#obj-str')
expect(await objStr.text()).toBe('obj.str: num: 0') expect(await objStr.text()).toBe('num: 0')
const objNum = await page.$('#obj-num') const objNum = await page.$('#obj-num')
expect(await objNum.text()).toBe('obj.num: 0') expect(await objNum.text()).toBe('0')
const objBool = await page.$('#obj-bool') const objBool = await page.$('#obj-bool')
expect(await objBool.text()).toBe('obj.bool: false') expect(await objBool.text()).toBe('false')
const objArr = await page.$('#obj-arr') const objArr = await page.$('#obj-arr')
expect(await objArr.text()).toBe('obj.arr: [0]') expect(await objArr.text()).toBe('[0]')
const watchObjRes = await page.$('#watch-obj-res') const watchObjRes = await page.$('#watch-obj-res')
// TODO web端和安卓端JSON.stringify对属性的排序不一致 // TODO web端和安卓端JSON.stringify对属性的排序不一致
if (process.env.uniTestPlatformInfo.startsWith('web') || process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { if (process.env.uniTestPlatformInfo.startsWith('web') || isIos) {
expect(await watchObjRes.text()).toBe( expect(await watchObjRes.text()).toBe(
'watch obj result: obj: {"num":0,"str":"num: 0","bool":false,"arr":[0]}' 'obj: {"num":0,"str":"num: 0","bool":false,"arr":[0]}'
) )
} else { } else {
expect(await watchObjRes.text()).toBe( expect(await watchObjRes.text()).toBe(
'watch obj result: obj: {"arr":[0],"bool":false,"num":0,"str":"num: 0"}' 'obj: {"arr":[0],"bool":false,"num":0,"str":"num: 0"}'
) )
} }
const watchObjStrRes = await page.$('#watch-obj-str-res') const watchObjStrRes = await page.$('#watch-obj-str-res')
expect(await watchObjStrRes.text()).toBe( expect(await watchObjStrRes.text()).toBe(
'watch obj.str result: str: num: 0, obj.str ref text: obj.str: num: 0') 'str: num: 0, obj.str ref text: num: 0')
// trigger // trigger
const watchObjStrTriggerNum = await page.$('#watch-obj-str-trigger-num') const watchObjStrTriggerNum = await page.$('#watch-obj-str-trigger-num')
expect(await watchObjStrTriggerNum.text()).toBe('watch obj.str trigger number: 0') expect(await watchObjStrTriggerNum.text()).toBe('0')
const watchObjArrRes = await page.$('#watch-obj-arr-res') const watchObjArrRes = await page.$('#watch-obj-arr-res')
expect(await watchObjArrRes.text()).toBe('watch obj.arr result: arr: [0]') expect(await watchObjArrRes.text()).toBe('arr: [0]')
const updateObjBtn = await page.$('#update-obj-btn') const updateObjBtn = await page.$('.update-obj-btn')
await updateObjBtn.tap() await updateObjBtn.tap()
expect(await objStr.text()).toBe('obj.str: num: 1') expect(await objStr.text()).toBe('num: 1')
expect(await objNum.text()).toBe('obj.num: 1') expect(await objNum.text()).toBe('1')
expect(await objBool.text()).toBe('obj.bool: true') expect(await objBool.text()).toBe('true')
expect(await objArr.text()).toBe('obj.arr: [0,1]') expect(await objArr.text()).toBe('[0,1]')
if (process.env.uniTestPlatformInfo.startsWith('web') || process.env.uniTestPlatformInfo.toLocaleLowerCase().startsWith('ios')) { if (process.env.uniTestPlatformInfo.startsWith('web') || isIos) {
expect(await watchObjRes.text()).toBe( expect(await watchObjRes.text()).toBe(
'watch obj result: obj: {"num":1,"str":"num: 1","bool":true,"arr":[0,1]}' 'obj: {"num":1,"str":"num: 1","bool":true,"arr":[0,1]}'
) )
} else { } else {
expect(await watchObjRes.text()).toBe( expect(await watchObjRes.text()).toBe(
'watch obj result: obj: {"arr":[0,1],"bool":true,"num":1,"str":"num: 1"}' 'obj: {"arr":[0,1],"bool":true,"num":1,"str":"num: 1"}'
) )
} }
expect(await watchObjStrRes.text()).toBe( expect(await watchObjStrRes.text()).toBe(
'watch obj.str result: str: num: 1, obj.str ref text: obj.str: num: 1') 'str: num: 1, obj.str ref text: num: 1')
expect(await watchObjStrTriggerNum.text()).toBe('watch obj.str trigger number: 1') expect(await watchObjStrTriggerNum.text()).toBe('1')
expect(await watchObjArrRes.text()).toBe( expect(await watchObjArrRes.text()).toBe(
'watch obj.arr result: arr: [0,1]') 'arr: [0,1]')
const watchCountAndObjNumRes = await page.$('#watch-count-obj-num-res') const watchCountAndObjNumRes = await page.$('#watch-count-obj-num-res')
expect(await watchCountAndObjNumRes.text()).toBe('watch count and obj.num result: count: 3, obj.num: 1') expect(await watchCountAndObjNumRes.text()).toBe('count: 3, obj.num: 1')
}) })
}) })
\ No newline at end of file
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1; padding-bottom: 20px"> <scroll-view style="flex: 1; padding-bottom: 20px">
<!-- #endif --> <!-- #endif -->
<view class="page"> <view class="page">
<text id="count" ref="countRef" class="mb-10">count: {{ count }}</text> <view class="flex justify-between flex-row mb-10">
<text id="watch-count-res" class="mb-10">watch count result: {{ watchCountRes }}</text> <text>count:</text>
<text id="watch-count-track-num" class="mb-10">watch count track number: {{ watchCountTrackNum }}</text> <text id="count" ref="countRef">{{ count }}</text>
<text id="watch-count-cleanup-res" class="mb-10">watch count cleanup result: {{ watchCountCleanupRes }}</text> </view>
<button id="increment-btn" class="mb-10" @click="increment"> <view class="flex justify-between mb-10">
increment <text>watch count result:</text>
</button> <text id="watch-count-res">{{ watchCountRes }}</text>
<button id="stop-watch-count-btn" class="mb-10" @click="triggerStopWatchCount"> </view>
<view class="flex justify-between flex-row mb-10">
<text>watch count track number:</text>
<text id="watch-count-track-num">{{ watchCountTrackNum }}</text>
</view>
<view class="flex justify-between mb-10">
<text>watch count cleanup number:</text>
<text id="watch-count-cleanup-res">{{ watchCountCleanupRes }}</text>
</view>
<button class="increment-btn mb-10" @click="increment">increment</button>
<button class="stop-watch-count-btn mb-10" @click="triggerStopWatchCount">
stop watch count stop watch count
</button> </button>
<text id="obj-str" ref="objStrRef" class="mb-10">obj.str: {{ obj.str }}</text>
<text id="watch-obj-str-trigger-num" class="mb-10">watch obj.str trigger number: <view class="flex justify-between flex-row mb-10">
{{ watchObjStrTriggerNum }}</text> <text>obj.str:</text>
<text id="obj-num" class="mb-10">obj.num: {{ obj.num }}</text> <text id="obj-str" ref="objStrRef">{{ obj.str }}</text>
<text id="obj-bool" ref="objBoolRef" class="mb-10">obj.bool: {{ obj.bool }}</text> </view>
<text id="obj-arr" ref="objArrRef" class="mb-10">obj.arr: {{ JSON.stringify(obj.arr) }}</text> <view class="flex justify-between flex-row mb-10">
<text id="watch-obj-res" class="mb-10">watch obj result: {{ watchObjRes }}</text> <text>watch obj.str trigger number:</text>
<text id="watch-obj-str-res" class="mb-10">watch obj.str result: {{ watchObjStrRes }}</text> <text id="watch-obj-str-trigger-num">{{ watchObjStrTriggerNum }}</text>
<text id="watch-obj-arr-res" class="mb-10">watch obj.arr result: {{ watchObjArrRes }}</text> </view>
<button id="update-obj-btn" class="mb-10" @click="updateObj"> <view class="flex justify-between flex-row mb-10">
<text>obj.num:</text>
<text id="obj-num">{{ obj.num }}</text>
</view>
<view class="flex justify-between flex-row mb-10">
<text>obj.bool:</text>
<text id="obj-bool" ref="objBoolRef">{{ obj.bool }}</text>
</view>
<view class="flex justify-between flex-row mb-10">
<text>obj.arr:</text>
<text id="obj-arr" ref="objArrRef">{{ JSON.stringify(obj.arr) }}</text>
</view>
<view class="flex justify-between mb-10">
<text>watch obj result:</text>
<text id="watch-obj-res">{{ watchObjRes }}</text>
</view>
<view class="flex justify-between mb-10">
<text>watch obj.str result:</text>
<text id="watch-obj-str-res">{{ watchObjStrRes }}</text>
</view>
<view class="flex justify-between mb-10">
<text>watch obj.arr result:</text>
<text id="watch-obj-arr-res">{{ watchObjArrRes }}</text>
</view>
<button class="update-obj-btn mb-10" @click="updateObj">
update obj update obj
</button> </button>
<text id="watch-count-obj-num-res" class="mb-10">watch count and obj.num result:
{{ watchCountAndObjNumRes }}</text> <view class="flex justify-between mb-10">
<text>watch count and obj.num result:</text>
<text id="watch-count-obj-num-res">{{ watchCountAndObjNumRes }}</text>
</view>
</view> </view>
<!-- #ifdef APP --> <!-- #ifdef APP -->
</scroll-view> </scroll-view>
<!-- #endif --> <!-- #endif -->
</template> </template>
<script setup> <script setup lang='uts'>
type Obj = { type Obj = {
num : number, num : number,
str : string, str : string,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册