You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions执行Jest报ReferenceError: TextEncoder未定义如何解决

排查方向&解决方案

  • 调整TextEncoder polyfill的加载时机
    你当前在test.js中赋值global.TextEncoder的时机晚于mongodb相关依赖的加载顺序,依赖whatwg-url在加载时就会调用TextEncoder,此时还没执行到你的赋值逻辑,因此报错。
    你需要通过jest的setupFiles配置提前注入polyfill:
  1. 新增jest.setup.js文件到jest.config.js同级目录,内容如下:
const { TextEncoder, TextDecoder } = require('util');
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;
  1. 修改jest.config.js,新增setupFiles配置,同时显式指定测试环境为node避免环境差异:
module.exports = {
    preset: '@shelf/jest-mongodb',
    testEnvironment: 'node',
    setupFiles: ['<rootDir>/jest.setup.js']
};
  1. 删除test.js中原有的const { TextEncoder } = require('util');和global.TextEncoder = TextEncoder;两行代码。
  • 检查Node版本兼容性
    util.TextEncoder是Node.js v11.0.0才新增的API,你工作流的Node版本矩阵包含了10.x,该版本下util模块不存在TextEncoder,会直接报错。

    • 如果不需要兼容Node.js 10.x,直接从工作流的node-version矩阵中删除10.x即可,同时建议删除非LTS的15.x,替换为维护期内的LTS版本(如16.x、18.x)
    • 如果需要兼容Node.js 10.x,安装text-encoding polyfill包:执行npm install text-encoding --save-dev,再把jest.setup.js里的引入来源替换为text-encoding即可。
  • 确认依赖版本一致性
    检查是否已将package-lock.json或yarn.lock提交到代码仓库,npm ci会严格根据lock文件安装依赖,如果lock文件未提交,CI环境安装的依赖版本可能和本地不同,也会触发兼容性问题。

  • 校验环境变量加载逻辑
    确认CI环境生成的.env文件路径正确、QA_MONGODB_URI密钥配置正常,避免因为环境变量加载失败导致的依赖初始化异常。

内容的提问来源于stack exchange,提问作者Zack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:03