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

运行Jest测试时出现ReferenceError及编码错误求助

问题解决思路与实操方案

一、搞定‘cesu8’编码未识别错误

  • 直接在测试文件最顶部显式导入并注册iconv-lite的编码支持:
    import iconv from 'iconv-lite';
    iconv.extendNodeEncodings();
    
  • 嫌每个测试文件都加麻烦的话,在Jest配置里全局注册:
    新建setup-jest.js文件:
    const iconv = require('iconv-lite');
    iconv.extendNodeEncodings();
    
    然后在jest.config.ts里添加:
    export default {
      // 其他已有配置
      setupFiles: ['./setup-jest.js'],
    };
    

二、修复Jest环境销毁后的ReferenceError

这个报错是因为测试跑完后还有异步操作在跑,Jest销毁环境后它还在尝试导入模块。

  • 检查你的repository.test.ts,所有异步逻辑(比如数据库查询、Promise)必须用await等完,别让异步代码“裸奔”
  • 用了fakeTimers的测试,记得最后调用jest.useRealTimers()恢复真实定时器,避免残留定时任务
  • 测试结束后强制关闭数据库连接:在repository.test.ts里加钩子:
    import { closeDbConnection } from '../db/index';
    
    afterAll(async () => {
      await closeDbConnection();
    });
    
    确保db/index.ts里有对应的关闭方法,比如MongoDB用mongoose.connection.close(),MySQL用connection.end()

三、排查残留进程

  • 给Jest加参数定位问题:修改package.json的test脚本:
    "scripts": {
      "test": "jest --forceExit --detectOpenHandles"
    }
    
    运行测试后,Jest会告诉你哪些资源没释放,照着改就行
  • 检查config/db.config.ts的连接逻辑,别在模块顶层直接创建持久连接(除非用了连接池且能自动回收)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:28:11