import assert from 'node:assert/strict' import { navigateBackFromOaHost } from './oa-navigate-back.js' const waitForSilentProbe = () => new Promise((resolve) => setTimeout(resolve, 320)) let redirects = [] let stack = [ { route: 'pages/market/webview/index' }, { route: 'pages/oa/webview/index' } ] globalThis.getCurrentPages = () => stack globalThis.uni = { navigateBack() { stack.pop() }, redirectTo({ url }) { redirects.push(url) }, reLaunch() { throw new Error('redirectTo should not fail in this test') } } navigateBackFromOaHost({ fallbackUrl: '/pages/index/index' }) await waitForSilentProbe() assert.deepEqual( redirects, [], '成功返回到上一层 web-view 后不得误触发 fallback' ) redirects = [] const stuckPage = { route: 'pages/market/webview/index' } stack = [{ route: 'pages/index/index' }, stuckPage] globalThis.uni.navigateBack = () => {} navigateBackFromOaHost({ fallbackUrl: '/pages/index/index' }) await waitForSilentProbe() assert.deepEqual( redirects, ['/pages/index/index'], '同一发起页仍在相同栈顶时必须执行 fallback' ) delete globalThis.getCurrentPages delete globalThis.uni console.log('oa-navigate-back: ok')