update
This commit is contained in:
40
vitest.setup.ts
Normal file
40
vitest.setup.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import '@testing-library/jest-dom'
|
||||
// RTL v13+ 默认会注册 afterEach 清理,但在 vitest + jsdom 下偶尔 cleanup 没跑,
|
||||
// 导致用例之间的 DOM 残留(出现多个「粘贴代码 → 运行 → 看热点与可优化点」之类)。
|
||||
// 显式 register 一次保险。
|
||||
import { afterEach, vi } from 'vitest'
|
||||
import { cleanup } from '@testing-library/react'
|
||||
|
||||
// jsdom 不带 ResizeObserver,App 用 useEffect 注册它来跟踪主区尺寸变化。
|
||||
// 给一个最小的 noop stub —— 我们的测试只关心渲染产物,不真关心尺寸。
|
||||
if (typeof globalThis.ResizeObserver === 'undefined') {
|
||||
globalThis.ResizeObserver = class {
|
||||
observe(): void {}
|
||||
unobserve(): void {}
|
||||
disconnect(): void {}
|
||||
} as unknown as typeof ResizeObserver
|
||||
}
|
||||
|
||||
// jsdom 24 仍未实现 PointerEvent; fireEvent.pointerDown 因此退化成裸 Event,button
|
||||
// / clientX / pointerId 全丢失 —— Splitter 这类用 Pointer Events 的组件测不出来。
|
||||
// 给一个最小 polyfill:继承 MouseEvent(jsdom 已支持)补 pointerId / pointerType,
|
||||
// 让 RTL 派发的 PointerEventInit(button / clientX / pointerId / pointerType)真正生效。
|
||||
if (typeof globalThis.PointerEvent === 'undefined') {
|
||||
class PointerEventPolyfill extends MouseEvent {
|
||||
public readonly pointerId: number
|
||||
public readonly pointerType: string
|
||||
public readonly isPrimary: boolean
|
||||
constructor(type: string, params: PointerEventInit = {}) {
|
||||
super(type, params)
|
||||
this.pointerId = params.pointerId ?? 0
|
||||
this.pointerType = params.pointerType ?? ''
|
||||
this.isPrimary = params.isPrimary ?? true
|
||||
}
|
||||
}
|
||||
globalThis.PointerEvent = PointerEventPolyfill as unknown as typeof PointerEvent
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
cleanup()
|
||||
vi.restoreAllMocks()
|
||||
})
|
||||
Reference in New Issue
Block a user