运行Jest用例导入mongodb时报TextEncoder未定义错误如何解决
问题原因
mongodb 4.x版本依赖Node.js内置的TextEncoder全局API,你当前使用的Jest测试环境默认启用了jsdom模拟环境,旧版本jsdom环境未将Node.js原生的TextEncoder、TextDecoder暴露到测试运行上下文中,因此导入mongodb包时直接抛出未定义错误。
Node.js 14.18.0本身已经内置了TextEncoder接口,错误根源来自Jest运行环境的变量隔离机制。
修复方案
你可以根据业务场景选择以下任意一种方案:
方案一:修改Jest测试环境为node(推荐,数据库连接类测试无需浏览器模拟环境)
修改你的jest配置文件(jest.config.js或jest.config.ts),新增/修改testEnvironment配置项:module.exports = { // 其余原有配置保持不变 testEnvironment: "node" }方案二:手动注入全局API(适用于必须保留jsdom环境的场景)
首先在项目根目录新建测试前置执行文件setupTests.ts,写入以下内容:import { TextEncoder, TextDecoder } from 'util'; // 将Node内置API挂载到测试全局对象上 (global as any).TextEncoder = TextEncoder; (global as any).TextDecoder = TextDecoder;随后修改Jest配置,新增
setupFilesAfterEnv配置项加载该前置文件:module.exports = { // 其余原有配置保持不变 setupFilesAfterEnv: ['<rootDir>/setupTests.ts'] }
内容的提问来源于stack exchange,提问作者Soham
相关产品推荐
相关产品推荐

