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

React应用中Jest测试套件抛出`Error: "toString()" failed`错误求助

解决React应用中Jest测试的"toString()" failed错误

嘿,我之前也碰到过类似的Jest报错,这个问题根源是Jest的jest-haste-map模块在读取文件时,没法把Buffer转换成字符串,大概率是碰到了非文本格式的文件(比如图片、字体、二进制资源),或者某个文件的编码有问题。下面是几个亲测有效的解决步骤:

1. 把二进制文件排除在Jest处理范围外

Jest默认会扫描项目里的所有文件,但二进制文件根本不需要被测试处理。你可以在jest.config.js里配置规则跳过这些文件:

在你的Jest配置文件中添加:

module.exports = {
  // 其他已有的配置...
  moduleNameMapper: {
    // 匹配所有常见的二进制文件后缀
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/__mocks__/fileMock.js',
  },
  transformIgnorePatterns: [
    '/node_modules/',
    '\\.(css|less|scss|sass)$', // 样式文件也可以跳过转换
  ],
};

然后在项目根目录创建__mocks__/fileMock.js文件,内容就一行:

module.exports = 'test-file-stub';

这样Jest就不会尝试去读取这些二进制文件的内容,而是用这个占位字符串代替,自然就不会触发toString的错误了。

2. 检查特定文件的编码是否异常

如果错误日志里能定位到某个具体文件,你可以打开这个文件看看编码是不是Jest支持的(比如UTF-8)。有些文件可能是用特殊编码保存的,导致Buffer转字符串失败。用VS Code这类编辑器打开后,重新选择UTF-8编码保存试试。

3. 更新Jest相关依赖

这个错误也可能是旧版本Jest的bug导致的。你可以尝试把jest和jest-haste-map更新到最新稳定版:

npm update jest jest-haste-map
# 用yarn的话就执行这个
yarn upgrade jest jest-haste-map

4. 清理Jest缓存

有时候缓存的文件数据异常也会引发奇怪的问题,先清理缓存再试试:

npx jest --clearCache

建议先从第一步开始尝试,我当时就是这么解决的,大部分情况都是二进制文件没被正确忽略导致的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:50