修复展厅列表嵌入返回入口
This commit is contained in:
@@ -1,14 +1,46 @@
|
||||
// @vitest-environment happy-dom
|
||||
|
||||
import { mount } from '@vue/test-utils'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import ExplainHallSelect from '@/components/explain/ExplainHallSelect.vue'
|
||||
|
||||
vi.mock('@/utils/hostEnvironment', () => ({
|
||||
isEmbeddedInWechatMiniProgram: () => false
|
||||
const hostEnvironmentMocks = vi.hoisted(() => ({
|
||||
embeddedInWechatMiniProgram: false
|
||||
}))
|
||||
|
||||
vi.mock('@/utils/hostEnvironment', () => ({
|
||||
isEmbeddedInWechatMiniProgram: () => hostEnvironmentMocks.embeddedInWechatMiniProgram
|
||||
}))
|
||||
|
||||
afterEach(() => {
|
||||
hostEnvironmentMocks.embeddedInWechatMiniProgram = false
|
||||
})
|
||||
|
||||
describe('讲解展厅选择列表', () => {
|
||||
it('微信嵌入态独立页面可强制显示 H5 返回入口,且不使用宿主导航布局', async () => {
|
||||
hostEnvironmentMocks.embeddedInWechatMiniProgram = true
|
||||
const wrapper = mount(ExplainHallSelect, {
|
||||
props: {
|
||||
forceInternalHeader: true
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.findAll('.explain-page-header')).toHaveLength(1)
|
||||
expect(wrapper.findAll('.header-back')).toHaveLength(1)
|
||||
expect(wrapper.classes()).not.toContain('host-navigation')
|
||||
|
||||
await wrapper.get('.header-back').trigger('tap')
|
||||
expect(wrapper.emitted('back')).toEqual([[]])
|
||||
})
|
||||
|
||||
it('微信嵌入态未强制时保留宿主导航布局,保护首页讲解 Tab', () => {
|
||||
hostEnvironmentMocks.embeddedInWechatMiniProgram = true
|
||||
const wrapper = mount(ExplainHallSelect)
|
||||
|
||||
expect(wrapper.find('.explain-page-header').exists()).toBe(false)
|
||||
expect(wrapper.classes()).toContain('host-navigation')
|
||||
})
|
||||
|
||||
it('展厅卡片只显示讲解对象数量,不暴露业务单元契约', async () => {
|
||||
const wrapper = mount(ExplainHallSelect, {
|
||||
props: {
|
||||
|
||||
@@ -42,6 +42,9 @@ const GuidePageFrameStub = defineComponent({
|
||||
|
||||
const ExplainHallSelectStub = defineComponent({
|
||||
name: 'ExplainHallSelect',
|
||||
props: {
|
||||
forceInternalHeader: Boolean
|
||||
},
|
||||
emits: ['back'],
|
||||
template: '<button data-testid="explain-list-back" @click="$emit(\'back\')">返回</button>'
|
||||
})
|
||||
@@ -103,6 +106,22 @@ describe('讲解展厅列表返回', () => {
|
||||
wrapper.unmount()
|
||||
})
|
||||
|
||||
it('独立页在微信嵌入态强制提供 H5 返回,并保留宿主识别参数', async () => {
|
||||
hostEnvironmentMocks.embeddedInWechatMiniProgram = true
|
||||
window.location.hash = '#/pages/explain/list?embedded=wechat-mini-program&weapp=1'
|
||||
window.history.replaceState({}, '', window.location.href)
|
||||
const wrapper = mountExplainList()
|
||||
|
||||
expect(wrapper.getComponent(ExplainHallSelectStub).props('forceInternalHeader')).toBe(true)
|
||||
await wrapper.get('[data-testid="explain-list-back"]').trigger('click')
|
||||
|
||||
expect(uni.navigateBack).not.toHaveBeenCalled()
|
||||
expect(uni.reLaunch).toHaveBeenCalledWith(expect.objectContaining({
|
||||
url: '/pages/index/index?tab=guide&embedded=wechat-mini-program&weapp=1'
|
||||
}))
|
||||
wrapper.unmount()
|
||||
})
|
||||
|
||||
it('上一页不是首页时使用 reLaunch,避免回到不相关页面', async () => {
|
||||
vi.stubGlobal('getCurrentPages', vi.fn(() => [
|
||||
{ route: 'pages/search/index', options: {} },
|
||||
|
||||
Reference in New Issue
Block a user