oa-navigate-back.test.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import assert from 'node:assert/strict'
  2. import { navigateBackFromOaHost } from './oa-navigate-back.js'
  3. const waitForSilentProbe = () =>
  4. new Promise((resolve) => setTimeout(resolve, 320))
  5. let redirects = []
  6. let stack = [
  7. { route: 'pages/market/webview/index' },
  8. { route: 'pages/oa/webview/index' }
  9. ]
  10. globalThis.getCurrentPages = () => stack
  11. globalThis.uni = {
  12. navigateBack() {
  13. stack.pop()
  14. },
  15. redirectTo({ url }) {
  16. redirects.push(url)
  17. },
  18. reLaunch() {
  19. throw new Error('redirectTo should not fail in this test')
  20. }
  21. }
  22. navigateBackFromOaHost({ fallbackUrl: '/pages/index/index' })
  23. await waitForSilentProbe()
  24. assert.deepEqual(
  25. redirects,
  26. [],
  27. '成功返回到上一层 web-view 后不得误触发 fallback'
  28. )
  29. redirects = []
  30. const stuckPage = { route: 'pages/market/webview/index' }
  31. stack = [{ route: 'pages/index/index' }, stuckPage]
  32. globalThis.uni.navigateBack = () => {}
  33. navigateBackFromOaHost({ fallbackUrl: '/pages/index/index' })
  34. await waitForSilentProbe()
  35. assert.deepEqual(
  36. redirects,
  37. ['/pages/index/index'],
  38. '同一发起页仍在相同栈顶时必须执行 fallback'
  39. )
  40. delete globalThis.getCurrentPages
  41. delete globalThis.uni
  42. console.log('oa-navigate-back: ok')