- 文件上传验证: ModelUploader组件增强、上传API错误处理 - GLTF解析器: 增强节点提取和元数据 - 板材编辑: PanelEditor客户端验证 + panels API服务端验证 - 装配步骤编辑: 修复未使用代码,添加预览按钮 - 装配动画播放: AssemblyPlayer步骤导航边界检查优化 - 分享链接: 完整CRUD API(创建、获取、删除),含验证和过期检查 跳过可选测试任务以加快MVP开发
76 lines
1.8 KiB
JavaScript
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()) |