This commit is contained in:
118
tests/unit/OutdoorArrivalRoutePanel.spec.ts
Normal file
118
tests/unit/OutdoorArrivalRoutePanel.spec.ts
Normal file
@@ -0,0 +1,118 @@
|
||||
// @vitest-environment happy-dom
|
||||
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { mount } from '@vue/test-utils'
|
||||
import OutdoorArrivalRoutePanel from '@/components/navigation/OutdoorArrivalRoutePanel.vue'
|
||||
|
||||
const destination = {
|
||||
title: '深圳自然博物馆[公交站]',
|
||||
address: 'M574路',
|
||||
latitude: 22.69258,
|
||||
longitude: 114.36372
|
||||
}
|
||||
|
||||
const start = {
|
||||
name: '我的位置',
|
||||
latitude: 22.688,
|
||||
longitude: 114.359
|
||||
}
|
||||
|
||||
const mountPanel = (overrides: Record<string, unknown> = {}) => mount(OutdoorArrivalRoutePanel, {
|
||||
props: {
|
||||
visible: true,
|
||||
phase: 'permission-needed',
|
||||
destination,
|
||||
startPoint: null,
|
||||
loading: false,
|
||||
routeError: '',
|
||||
routeDistance: 0,
|
||||
routeDuration: 0,
|
||||
manualSearchResults: [],
|
||||
manualSearchLoading: false,
|
||||
...overrides
|
||||
}
|
||||
})
|
||||
|
||||
describe('来馆路线起点确认', () => {
|
||||
it('定位不可用时提示重新检测或手动选择,而不显示旧馆外导览界面', async () => {
|
||||
const wrapper = mountPanel({
|
||||
locationMessage: '请在微信小程序的设置中开启位置权限后重试'
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toContain('暂未获取实时位置')
|
||||
expect(wrapper.text()).toContain('重新检测')
|
||||
expect(wrapper.text()).toContain('手动选择起点')
|
||||
expect(wrapper.text()).not.toContain('馆外导览')
|
||||
|
||||
await wrapper.get('.outdoor-route-action.secondary').trigger('tap')
|
||||
await wrapper.get('.outdoor-route-action.primary').trigger('tap')
|
||||
|
||||
expect(wrapper.emitted('retryLocation')).toHaveLength(1)
|
||||
expect(wrapper.emitted('manualStartRequest')).toHaveLength(1)
|
||||
})
|
||||
|
||||
it('浏览器已拒绝位置权限时,重新检测区域会给出明确的设置指引', () => {
|
||||
const wrapper = mountPanel({
|
||||
locationHelpVisible: true,
|
||||
locationMessage: '当前位置权限已关闭'
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toContain('请开启位置权限')
|
||||
expect(wrapper.text()).toContain('微信小程序的设置')
|
||||
expect(wrapper.text()).toContain('重新检测')
|
||||
})
|
||||
|
||||
it('手动选择的起点保留确认操作,避免误用地图点位', async () => {
|
||||
const wrapper = mountPanel({
|
||||
phase: 'confirm-start',
|
||||
startPoint: { ...start, name: '深圳北站' }
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toContain('深圳北站')
|
||||
expect(wrapper.text()).toContain('从这里出发')
|
||||
|
||||
await wrapper.get('.outdoor-route-action.primary').trigger('tap')
|
||||
await wrapper.get('.outdoor-route-text-action').trigger('tap')
|
||||
|
||||
expect(wrapper.emitted('confirmStart')).toHaveLength(1)
|
||||
expect(wrapper.emitted('manualStartRequest')).toHaveLength(1)
|
||||
})
|
||||
|
||||
it('手动起点支持输入地点与地图选点两条路径', async () => {
|
||||
const wrapper = mountPanel({ phase: 'manual-search' })
|
||||
|
||||
await wrapper.get('.outdoor-route-switch + .outdoor-route-switch').trigger('tap')
|
||||
expect(wrapper.emitted('manualMapRequest')).toHaveLength(1)
|
||||
|
||||
await wrapper.setProps({
|
||||
manualSearchResults: [{
|
||||
id: 'ping-shan-station',
|
||||
title: '深圳坪山站',
|
||||
address: '深圳市坪山区',
|
||||
category: '火车站',
|
||||
latitude: 22.699,
|
||||
longitude: 114.347
|
||||
}]
|
||||
})
|
||||
await wrapper.get('.outdoor-route-search-result').trigger('tap')
|
||||
|
||||
expect(wrapper.emitted('manualStartConfirm')).toEqual([[expect.objectContaining({
|
||||
id: 'ping-shan-station',
|
||||
title: '深圳坪山站'
|
||||
})]])
|
||||
})
|
||||
|
||||
it('路线已生成时仅展示路线结果,不重复显示出行方式选择', () => {
|
||||
const wrapper = mountPanel({
|
||||
phase: 'route',
|
||||
startPoint: start,
|
||||
routeDistance: 1850,
|
||||
routeDuration: 14
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toContain('1.9 公里')
|
||||
expect(wrapper.text()).toContain('约 14 分钟')
|
||||
expect(wrapper.text()).toContain('路线已显示在地图上')
|
||||
expect(wrapper.find('.outdoor-route-mode-list').exists()).toBe(false)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user