31 lines
2.2 KiB
TypeScript
31 lines
2.2 KiB
TypeScript
/**
|
|
* 47-tv: Apple TV Vue 组件化测试
|
|
* 覆盖: 3 个视频卡片/海报/标题、播放/player 显示/隐藏、video source、卸载
|
|
* ⚠️ jsdom 不支持 video.play(),验证 DOM 状态变化
|
|
*/
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
|
|
import { h, render, nextTick } from 'vue'
|
|
import TVComponent from '../../src/apps/tv/TV.vue'
|
|
import { setupDOM } from '../helpers'
|
|
|
|
describe('47-tv', () => {
|
|
let body: HTMLElement, win: any
|
|
beforeEach(() => {
|
|
setupDOM(); const el = document.createElement('div'); el.className = 'window'; document.body.appendChild(el)
|
|
body = document.createElement('div'); body.className = 'win-body'; el.appendChild(body)
|
|
win = { el, body, timers: [], data: {} };
|
|
(window as any).Sys = () => ({ registerMedia: () => {}, unregisterMedia: () => {} })
|
|
})
|
|
afterEach(() => { render(null, body); win.el.remove() })
|
|
function m() { render(h(TVComponent, { win }), body) }
|
|
|
|
it('3 个视频卡片', () => { m(); expect(body.querySelectorAll('.tv-card').length).toBe(3) })
|
|
it('每张有海报', () => { m(); expect(body.querySelector('.tv-poster')).toBeTruthy() })
|
|
it('每张有标题', () => { m(); expect(body.querySelector('.tv-name')?.textContent).toBeTruthy() })
|
|
it('player 初始隐藏', () => { m(); expect(body.querySelector('.tv-player')?.classList.contains('hidden')).toBe(true) })
|
|
it('点击卡片显示 player', async () => { m(); const card = body.querySelector('.tv-card') as HTMLElement; card.dispatchEvent(new MouseEvent('click', { bubbles: true })); await nextTick(); expect(body.querySelector('.tv-player')?.classList.contains('hidden')).toBe(false) })
|
|
it('player 显示视频标题', async () => { m(); (body.querySelector('.tv-card') as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true })); await nextTick(); expect(body.querySelector('.tv-ptitle')?.textContent).toBeTruthy() })
|
|
it('video 元素存在', async () => { m(); (body.querySelector('.tv-card') as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true })); await nextTick(); expect(body.querySelector('video')).toBeTruthy() })
|
|
it('卸载', () => { m(); render(null, body); expect(body.children.length).toBe(0) })
|
|
})
|