93 lines
3.0 KiB
TypeScript
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)
|
|
})
|
|
})
|