提交 54314d03 编写于 作者: DCloud-WZF's avatar DCloud-WZF 💬

feat: 补充 App.onError 捕获异步异常示例及测试 issue:7116

上级 c90a175f
<template>
<view class="page">
<button id="trigger-error" @click="triggerError">trigger error</button>
<button class='mt-10' id="trigger-timeout-error" @click="triggerTimeoutError">trigger timeout error</button>
</view>
</template>
<script setup lang="uts">
import { state } from '@/store/index.uts'
import { state } from '@/store/index.uts'
onReady(() => {
throw new Error('error in error composition page onReady')
})
const triggerError = () => {
throw new Error('trigger error in throw error composition page')
}
const triggerTimeoutError = () => {
setTimeout(() => {
throw new Error('setTimeout trigger error in throw error composition page')
}, 10)
}
// 自动化测试
const getLifeCycleNum = () : number => {
......
<template>
<view class="page">
<button id="trigger-error" @click="triggerError">trigger error</button>
</view>
</template>
<script lang="uts">
import { state } from '@/store/index.uts'
export default {
onReady(){
throw new Error('error in error options page onReady')
},
methods: {
triggerError(){
throw new Error('trigger error in throw error options page')
},
// 自动化测试
getLifeCycleNum() : number {
return state.lifeCycleNum
}
},
}
</script>
<template>
<view class="page">
<button id="trigger-error" @click="triggerError">trigger error</button>
<button class='mt-10' id="trigger-timeout-error" @click="triggerTimeoutError">trigger timeout error</button>
</view>
</template>
<script lang="uts">
import { state } from '@/store/index.uts'
export default {
onReady() {
throw new Error('error in error options page onReady')
},
methods: {
triggerError() {
throw new Error('trigger error in throw error options page')
},
triggerTimeoutError() {
setTimeout(() => {
throw new Error('setTimeout trigger error in throw error options page')
}, 10)
},
// 自动化测试
getLifeCycleNum() : number {
return state.lifeCycleNum
}
},
}
</script>
\ No newline at end of file
const OPTIONS_PAGE_PATH = '/pages/error/throw-error/throw-error-options'
const COMPOSITION_PAGE_PATH = '/pages/error/throw-error/throw-error-composition'
const HOME_PAGE_PATH = '/pages/index/index'
describe('throw error', () => {
let page
let lifeCycleNum
const initLifecycle = async () => {
page = await program.reLaunch(HOME_PAGE_PATH)
await page.waitFor('view')
await page.callMethod('setLifeCycleNum', 0)
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(0)
}
const test = async (pagePath) => {
await initLifecycle()
page = await program.reLaunch(pagePath)
await page.waitFor('view')
expect(page.path).toBe(pagePath.substring(1))
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(100)
const triggerErrorBtn = await page.$('#trigger-error')
await triggerErrorBtn.tap()
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(200)
page = await program.navigateTo(HOME_PAGE_PATH)
await page.waitFor('view')
expect(page.path).toBe(HOME_PAGE_PATH.substring(1))
}
it('onError options API', async () => {
await test(OPTIONS_PAGE_PATH)
})
it('onError composition API', async () => {
await test(COMPOSITION_PAGE_PATH)
})
afterAll(async () => {
const resetLifecycleNum = 1110
await page.callMethod('setLifeCycleNum', resetLifecycleNum)
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(resetLifecycleNum)
})
})
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
const isAndroid = platformInfo.includes('android')
const isIos = platformInfo.includes('ios')
const OPTIONS_PAGE_PATH = '/pages/error/throw-error/throw-error-options'
const COMPOSITION_PAGE_PATH = '/pages/error/throw-error/throw-error-composition'
const HOME_PAGE_PATH = '/pages/index/index'
describe('throw error', () => {
let page
let lifeCycleNum
const initLifecycle = async () => {
page = await program.reLaunch(HOME_PAGE_PATH)
await page.waitFor('view')
await page.callMethod('setLifeCycleNum', 0)
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(0)
}
const test = async (pagePath) => {
await initLifecycle()
page = await program.reLaunch(pagePath)
await page.waitFor('view')
expect(page.path).toBe(pagePath.substring(1))
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(100)
const triggerErrorBtn = await page.$('#trigger-error')
await triggerErrorBtn.tap()
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(200)
if (isAndroid || isIos) {
const triggerTimeoutErrorBtn = await page.$('#trigger-timeout-error')
await triggerTimeoutErrorBtn.tap()
await page.waitFor(500)
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(300)
}
page = await program.navigateTo(HOME_PAGE_PATH)
await page.waitFor('view')
expect(page.path).toBe(HOME_PAGE_PATH.substring(1))
}
it('onError options API', async () => {
await test(OPTIONS_PAGE_PATH)
})
it('onError composition API', async () => {
await test(COMPOSITION_PAGE_PATH)
})
afterAll(async () => {
const resetLifecycleNum = 1110
await page.callMethod('setLifeCycleNum', resetLifecycleNum)
lifeCycleNum = await page.callMethod('getLifeCycleNum')
expect(lifeCycleNum).toBe(resetLifecycleNum)
})
})
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册