furniture-3d-system-Wu/jest.setup.js
WuYongJie 75db836d29 feat(3D核心功能): 完成所有必需实现任务
- 文件上传验证: ModelUploader组件增强、上传API错误处理
- GLTF解析器: 增强节点提取和元数据
- 板材编辑: PanelEditor客户端验证 + panels API服务端验证
- 装配步骤编辑: 修复未使用代码,添加预览按钮
- 装配动画播放: AssemblyPlayer步骤导航边界检查优化
- 分享链接: 完整CRUD API(创建、获取、删除),含验证和过期检查

跳过可选测试任务以加快MVP开发
2025-12-22 16:18:13 +08:00

76 lines
1.8 KiB
JavaScript

import '@testing-library/jest-dom'
// Polyfill setImmediate for Prisma
if (typeof setImmediate === 'undefined') {
global.setImmediate = (callback, ...args) => setTimeout(callback, 0, ...args)
}
// Polyfill Request and Response for Next.js server components
if (typeof Request === 'undefined') {
global.Request = class Request {
constructor(input, init) {
this.url = typeof input === 'string' ? input : input.url
this.method = init?.method || 'GET'
this.headers = new Map(Object.entries(init?.headers || {}))
this.body = init?.body
}
}
}
if (typeof Response === 'undefined') {
global.Response = class Response {
constructor(body, init) {
this.body = body
this.status = init?.status || 200
this.statusText = init?.statusText || 'OK'
this.headers = new Map(Object.entries(init?.headers || {}))
}
json() {
return Promise.resolve(JSON.parse(this.body))
}
text() {
return Promise.resolve(this.body)
}
}
}
// Mock IntersectionObserver
global.IntersectionObserver = class IntersectionObserver {
constructor() {}
disconnect() {}
observe() {}
unobserve() {}
}
// Mock ResizeObserver
global.ResizeObserver = class ResizeObserver {
constructor() {}
disconnect() {}
observe() {}
unobserve() {}
}
// Mock matchMedia
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation(query => ({
matches: false,
media: query,
onchange: null,
addListener: jest.fn(), // deprecated
removeListener: jest.fn(), // deprecated
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
})
// Mock CSS.supports
global.CSS = {
supports: jest.fn().mockReturnValue(true),
}
// Mock performance.now
global.performance.now = jest.fn(() => Date.now())