@@ -4,6 +4,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const target = { latitude: 22.604321, longitude: 114.058765, name: '停车场 A&B', address: '龙华区 #1' }
|
||||
const setEmbeddedRuntime = () => Object.assign(window, { __wxjs_environment: 'miniprogram' })
|
||||
const addWechatSdkMarker = () => {
|
||||
const script = document.createElement('script')
|
||||
script.dataset.wechatJsSdk = 'true'
|
||||
document.head.appendChild(script)
|
||||
}
|
||||
|
||||
const loadService = async () => {
|
||||
vi.resetModules()
|
||||
@@ -33,6 +38,7 @@ describe('微信小程序 web-view 桥接', () => {
|
||||
|
||||
it('等待延迟注入的 bridge 后导航到编码后的宿主页', async () => {
|
||||
setEmbeddedRuntime()
|
||||
addWechatSdkMarker()
|
||||
const { openWechatMiniProgramLocation } = await loadService()
|
||||
const result = openWechatMiniProgramLocation(target)
|
||||
await vi.advanceTimersByTimeAsync(100)
|
||||
@@ -84,4 +90,45 @@ describe('微信小程序 web-view 桥接', () => {
|
||||
await expect(first).resolves.toEqual({ status: 'opened' })
|
||||
expect(navigateTo).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('等待延迟 bridge 后返回宿主小程序', async () => {
|
||||
setEmbeddedRuntime()
|
||||
addWechatSdkMarker()
|
||||
const { returnToWechatMiniProgram } = await loadService()
|
||||
const result = returnToWechatMiniProgram()
|
||||
await vi.advanceTimersByTimeAsync(100)
|
||||
const navigateBack = vi.fn(({ success }) => success())
|
||||
Object.assign(window, {
|
||||
wx: {
|
||||
miniProgram: {
|
||||
getEnv: (done: (value: { miniprogram: boolean }) => void) => done({ miniprogram: true }),
|
||||
navigateBack
|
||||
}
|
||||
}
|
||||
})
|
||||
await vi.advanceTimersByTimeAsync(100)
|
||||
|
||||
await expect(result).resolves.toEqual({ status: 'returned' })
|
||||
expect(navigateBack).toHaveBeenCalledWith(expect.objectContaining({ delta: 1 }))
|
||||
})
|
||||
|
||||
it('原生返回失败时委托宿主页执行安全回退', async () => {
|
||||
setEmbeddedRuntime()
|
||||
const { MINI_PROGRAM_RETURN_MESSAGE, returnToWechatMiniProgram } = await loadService()
|
||||
const postMessage = vi.fn()
|
||||
Object.assign(window, {
|
||||
wx: {
|
||||
miniProgram: {
|
||||
getEnv: (done: (value: { miniprogram: boolean }) => void) => done({ miniprogram: true }),
|
||||
navigateBack: ({ fail }: { fail?: (error: { errMsg?: string }) => void }) => fail?.({ errMsg: 'navigateBack:fail page stack is empty' }),
|
||||
postMessage
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
await expect(returnToWechatMiniProgram()).resolves.toEqual({ status: 'returned' })
|
||||
expect(postMessage).toHaveBeenCalledWith({
|
||||
data: { type: MINI_PROGRAM_RETURN_MESSAGE }
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user