修正讲解音频时长显示
Some checks failed
CI / verify (push) Has been cancelled

- 未加载媒体元数据时默认显示零时长
- 使用音频文件真实媒体时长更新播放器
- 避免使用不准确的接口时长覆盖播放器显示
- 补充音频时长回归测试

Made-with: Proma
This commit is contained in:
lyf
2026-08-31 17:15:27 +08:00
parent 5de005e011
commit 80ac62a5ff
4 changed files with 31 additions and 15 deletions

View File

@@ -172,7 +172,7 @@ describe('讲解详情音频优先布局', () => {
expect(wrapper.get('.content-section').classes()).toContain('is-english')
expect(wrapper.find('.section-title').exists()).toBe(false)
expect(wrapper.get('.section-text').text()).toContain('detailed English narration')
expect(wrapper.get('.detail-audio-time').text()).toBe('0:00 / 1:21')
expect(wrapper.get('.detail-audio-time').text()).toBe('0:00 / 0:00')
expect(wrapper.get('.detail-audio-speed').attributes('aria-label')).toBe('播放速度 1.0倍')
})

View File

@@ -20,6 +20,26 @@ describe('全局讲解播放器语言切换', () => {
vi.unstubAllGlobals()
})
it('媒体元数据加载前忽略接口时长,加载后使用音频真实时长', () => {
const audio = document.createElement('audio')
vi.spyOn(window, 'Audio').mockImplementation(() => audio)
player.prepare({
id: 'duration-audio',
name: '时长测试',
audioUrl: '/museum-assets/audio/duration.mp3',
duration: 28,
language: 'zh-CN'
})
expect(player.duration.value).toBe(0)
Object.defineProperty(audio, 'duration', { configurable: true, value: 54.974938 })
audio.dispatchEvent(new Event('loadedmetadata'))
expect(player.duration.value).toBeCloseTo(54.974938)
})
it('切换到粤语时只从当前统一详情的音轨数组选择,不产生额外 HTTP 请求', async () => {
const request = vi.fn()
vi.stubGlobal('uni', { request, showToast: vi.fn() })