/** * Vitest 前置 polyfills - 在 vitest.setup.ts 之前运行 * * 必须独立文件:vitest.setup.ts 顶部 import { server } 会触发 * handlers.ts → user.ts 的模块加载链,user.ts 顶层调用 btoa() 处理 * 含中文字符的 mockUserInfo,jsdom 的 btoa 对非 Latin1 字符抛 * InvalidCharacterError。本文件无 import,在 setupFiles 数组中 * 排在 vitest.setup.ts 之前,确保 polyfill 先生效。 */ // btoa Unicode 兼容 polyfill(jsdom 的 btoa 对非 Latin1 字符抛 InvalidCharacterError) // mockToken = btoa(JSON.stringify(mockUserInfo)) 含中文字符,需 UTF-8 安全编码 const originalBtoa = globalThis.btoa; globalThis.btoa = (str: string): string => { try { return originalBtoa(str); } catch { const bytes = new TextEncoder().encode(str); let binary = ""; for (const byte of bytes) { binary += String.fromCharCode(byte); } return originalBtoa(binary); } };