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

使用Jest模拟fs.readFileSync时堆内存溢出如何修复

问题修复方案

错误原因

  • fs.readFileSync 是Node.js内置的同步IO方法,调用后直接返回结果而非Promise对象,你使用了仅适用于异步方法的mockResolvedValue进行模拟,导致业务代码拿到不符合预期的Promise返回值,执行后续逻辑时出现无限循环或异常内存占用,最终触发JavaScript堆内存溢出。
  • 若你的业务代码中对readFileSync的返回结果执行了JSON解析等操作,直接返回JS对象还会额外触发解析错误。

正确模拟方式

同步方法需要使用mockReturnValue指定返回值,如果业务代码中会对返回的文件内容做JSON解析,需要返回序列化后的JSON字符串:

const request  = require('supertest');
const app = require('../../src/app');
const fs = require('fs');

jest.mock('fs');

describe('Get Accounts Info', () => {
    it('Get Accounts Info', async () => {
      // 替换mockResolvedValue为mockReturnValue,返回JSON字符串匹配真实读取场景
      fs.readFileSync.mockReturnValue(JSON.stringify({ message: 'Test'}))
      const res = await request(app).get('/accounts')
      // 建议补充返回结果断言,比如校验状态码、响应体
      expect(res.statusCode).toBe(200)
    });
});

补充说明:仅当你需要模拟异步的fs.readFile方法时,才需要使用mockResolvedValue或者mockImplementation返回Promise。

运行验证

修改后执行原测试命令即可正常运行:
npm test -- routes.test.js -t "Get Accounts Info"

内容的提问来源于stack exchange,提问作者Đoàn Đức Bảo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:02