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
相关产品推荐
相关产品推荐

