Files
frontend-miniapp/tests/unit/hostEnvironment.spec.ts
lyf fc93b8d7d3
Some checks failed
CI / verify (push) Has been cancelled
修正讲解列表入口返回规则
2026-07-28 00:20:05 +08:00

74 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest'
import {
isEmbeddedInWechatMiniProgram,
navigateBackToWechatMiniProgram
} from '@/utils/hostEnvironment'
const createWindow = (overrides: Record<string, unknown> = {}) => ({
location: { search: '', hash: '' },
navigator: { userAgent: '' },
...overrides
})
afterEach(() => {
vi.unstubAllGlobals()
})
describe('微信小程序宿主环境识别', () => {
it('同一模块可以识别延迟注入的微信环境标识', () => {
const testWindow = createWindow()
vi.stubGlobal('window', testWindow)
expect(isEmbeddedInWechatMiniProgram()).toBe(false)
Object.assign(testWindow, { __wxjs_environment: 'miniprogram' })
expect(isEmbeddedInWechatMiniProgram()).toBe(true)
})
it('支持宿主在普通查询或 hash 查询中显式声明环境', () => {
vi.stubGlobal('window', createWindow({
location: {
search: '?embedded=weapp',
hash: '#/pages/index/index?tab=guide'
}
}))
expect(isEmbeddedInWechatMiniProgram()).toBe(true)
vi.stubGlobal('window', createWindow({
location: {
search: '',
hash: '#/pages/index/index?tab=guide&embedded=wechat-mini-program'
}
}))
expect(isEmbeddedInWechatMiniProgram()).toBe(true)
})
it('普通微信 H5 不会被误判为小程序 web-view', () => {
vi.stubGlobal('window', createWindow({
navigator: { userAgent: 'Mozilla/5.0 MicroMessenger/8.0.50' }
}))
expect(isEmbeddedInWechatMiniProgram()).toBe(false)
})
})
describe('小程序宿主返回', () => {
it('嵌入态调用小程序 navigateBack', () => {
const navigateBack = vi.fn()
vi.stubGlobal('window', createWindow({
__wxjs_environment: 'miniprogram',
wx: { miniProgram: { navigateBack } }
}))
expect(navigateBackToWechatMiniProgram()).toBe(true)
expect(navigateBack).toHaveBeenCalledWith({ delta: 1 })
})
it('非嵌入态不会调用小程序返回桥接', () => {
const navigateBack = vi.fn()
vi.stubGlobal('window', createWindow({ wx: { miniProgram: { navigateBack } } }))
expect(navigateBackToWechatMiniProgram()).toBe(false)
expect(navigateBack).not.toHaveBeenCalled()
})
})