Files
frontend-miniapp/tests/unit/ExplainHallSelect.spec.ts
2026-07-17 22:53:22 +08:00

94 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// @vitest-environment happy-dom
import { mount } from '@vue/test-utils'
import { describe, expect, it, vi } from 'vitest'
import ExplainHallSelect from '@/components/explain/ExplainHallSelect.vue'
vi.mock('@/utils/hostEnvironment', () => ({
isEmbeddedInWechatMiniProgram: () => false
}))
describe('讲解展厅选择列表', () => {
it('展厅卡片只显示讲解对象数量,不暴露业务单元契约', async () => {
const wrapper = mount(ExplainHallSelect, {
props: {
stage: 'hall',
halls: [
{
id: 'hall-evolution',
name: '生命演化厅',
explainCount: 6,
guideStopCount: 6,
searchText: '生命演化厅'
}
]
}
})
const cards = wrapper.findAll('.hall-card')
expect(cards).toHaveLength(1)
expect(wrapper.text()).toContain('生命演化厅')
expect(wrapper.text()).toContain('6 个讲解对象')
expect(wrapper.text()).not.toContain('业务单元')
await cards[0]?.trigger('tap')
expect(wrapper.emitted('hallClick')).toEqual([['hall-evolution']])
})
it('展厅阶段按卡片网格展示英文名和进入入口', () => {
const wrapper = mount(ExplainHallSelect, {
props: {
stage: 'hall',
halls: [{
id: 'hall-dinosaur',
name: '恐龙厅',
floorLabel: 'L-2',
explainCount: 35,
guideStopCount: 35,
searchText: '恐龙厅'
}]
}
})
const card = wrapper.get('.hall-overview-card')
expect(wrapper.get('.header-title').text()).toBe('展厅讲解')
expect(card.attributes('style')).toContain('--hall-card-color: #c7a15c')
expect(card.text()).toContain('Dinosaur Hall')
expect(card.text()).toContain('L-2 · 35 个讲解对象')
expect(card.get('.hall-go-entry').text()).toBe('GO ')
})
it('READY 讲解点不显示可讲解标签,非 READY 讲解点保留图文标签和点击事件', async () => {
const readyStop = {
id: 'stop-ready',
name: '生命起源',
hallId: 'hall-evolution',
audioStatus: 'READY'
}
const textStop = {
id: 'stop-text',
name: '化石记录',
hallId: 'hall-evolution',
audioStatus: 'MISSING'
}
const wrapper = mount(ExplainHallSelect, {
props: {
stage: 'stop',
guideStops: [readyStop, textStop]
}
})
const cards = wrapper.findAll('.stop-card')
expect(cards).toHaveLength(2)
expect(wrapper.text()).toContain('生命起源')
expect(wrapper.text()).toContain('化石记录')
expect(wrapper.text()).not.toContain('可讲解')
expect(cards[0]?.find('.hall-meta-row').exists()).toBe(false)
expect(cards[1]?.find('.floor-badge').text()).toBe('图文')
await cards[0]?.trigger('tap')
await cards[1]?.trigger('tap')
expect(wrapper.emitted('guideStopClick')).toEqual([[readyStop], [textStop]])
})
})