Files
frontend-miniapp/tests/unit/ArrivalPanel.spec.ts
lyf 540bb8627f
Some checks failed
CI / verify (push) Has been cancelled
同步移动端源码并修复小程序嵌入标题
2026-07-28 18:37:40 +08:00

93 lines
3.0 KiB
TypeScript

// @vitest-environment happy-dom
import { describe, expect, it } from 'vitest'
import { mount } from '@vue/test-utils'
import ArrivalPanel from '@/components/navigation/ArrivalPanel.vue'
import { ARRIVAL_TARGETS } from '@/data/arrivalSearchTargets'
const selectedTarget = ARRIVAL_TARGETS.find((target) => target.type === 'parking')!
const mountArrivalPanel = (overrides: Record<string, unknown> = {}) => mount(ArrivalPanel, {
props: {
visible: true,
mode: 'browse',
activeType: null,
targets: [],
selectedTargetId: '',
selectedTarget: null,
loading: false,
error: '',
...overrides
}
})
describe('来馆目的地选择', () => {
it('初始只显示分类入口,默认不选中也不请求或展示附近点位', async () => {
const wrapper = mountArrivalPanel()
const tabs = wrapper.findAll('.arrival-tab')
expect(tabs.every((tab) => !tab.classes('active'))).toBe(true)
expect(wrapper.find('.arrival-target-row').exists()).toBe(false)
await tabs[0].trigger('tap')
expect(wrapper.emitted('typeChange')).toEqual([['bus']])
expect(wrapper.find('.arrival-primary').exists()).toBe(false)
})
it('选择列表点位后向父级交付完整的地图目标', async () => {
const wrapper = mountArrivalPanel({
activeType: selectedTarget.type,
targets: [selectedTarget]
})
await wrapper.get('.arrival-target-row').trigger('tap')
expect(wrapper.emitted('selectTarget')).toEqual([[selectedTarget]])
})
it('详情态不展示冗余标题,关闭后回到分类查询', async () => {
const wrapper = mountArrivalPanel({
mode: 'detail',
selectedTargetId: selectedTarget.id,
selectedTarget
})
expect(wrapper.text()).toContain(selectedTarget.title)
expect(wrapper.text()).not.toContain('目的地详情')
await wrapper.get('.arrival-primary').trigger('tap')
await wrapper.get('.arrival-close').trigger('tap')
expect(wrapper.emitted('navigate')).toEqual([[selectedTarget]])
expect(wrapper.emitted('back')).toHaveLength(1)
})
it('分类查询态不显示关闭按钮', () => {
const wrapper = mountArrivalPanel()
expect(wrapper.find('.arrival-close').exists()).toBe(false)
expect(wrapper.find('.arrival-collapse').exists()).toBe(false)
})
it('展开分类结果后可收起到初始分类栏', async () => {
const wrapper = mountArrivalPanel({
activeType: selectedTarget.type,
targets: [selectedTarget]
})
await wrapper.get('.arrival-collapse').trigger('tap')
expect(wrapper.emitted('collapse')).toHaveLength(1)
})
it('服务异常时提供原位重试,不展示失真的静态结果', async () => {
const wrapper = mountArrivalPanel({
activeType: selectedTarget.type,
error: '周边点位暂时无法加载'
})
expect(wrapper.text()).toContain('周边点位暂时无法加载')
await wrapper.get('.arrival-retry').trigger('tap')
expect(wrapper.emitted('retry')).toHaveLength(1)
})
})