@@ -2,7 +2,7 @@
|
||||
|
||||
import { defineComponent } from 'vue'
|
||||
import { mount } from '@vue/test-utils'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import GuideMapShell from '@/components/navigation/GuideMapShell.vue'
|
||||
|
||||
const ThreeMapStub = defineComponent({
|
||||
@@ -26,6 +26,10 @@ const ThreeMapStub = defineComponent({
|
||||
}
|
||||
},
|
||||
emits: ['floor-change', 'target-focus'],
|
||||
setup(_, { expose }) {
|
||||
expose({ switchFloor: vi.fn() })
|
||||
return {}
|
||||
},
|
||||
template: '<div data-testid="three-map"></div>'
|
||||
})
|
||||
|
||||
@@ -104,4 +108,27 @@ describe('GuideMapShell 点位过滤契约', () => {
|
||||
expect(renderer.props('initialFloorId')).toBe('L2')
|
||||
expect(renderer.props('initialView')).toBe('overview')
|
||||
})
|
||||
|
||||
it('外观状态点击当前业务楼层仍请求渲染器,且等待 floor-change 才提交业务视图', async () => {
|
||||
const wrapper = mount(GuideMapShell, {
|
||||
props: {
|
||||
mapType: 'indoor',
|
||||
indoorModelSource: modelSource,
|
||||
floors: [{ id: 'L2', label: '2F' }],
|
||||
activeFloor: 'L2',
|
||||
indoorView: 'overview',
|
||||
indoorInitialView: 'overview'
|
||||
},
|
||||
global: { stubs: { ThreeMap: ThreeMapStub } }
|
||||
})
|
||||
const renderer = wrapper.getComponent(ThreeMapStub)
|
||||
|
||||
await (wrapper.vm as any).switchFloor('L2')
|
||||
expect((renderer.vm as any).switchFloor).toHaveBeenCalledWith('L2')
|
||||
expect(wrapper.emitted('indoorViewChange')).toBeUndefined()
|
||||
|
||||
renderer.vm.$emit('floor-change', 'L2')
|
||||
await wrapper.vm.$nextTick()
|
||||
expect(wrapper.emitted('indoorViewChange')).toEqual([['floor']])
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user