Jest测试失败时截断接收数组,如何强制打印完整数组?
Jest测试失败时大型数组被截断,如何打印完整内容
问题场景
使用Jest断言大型数组包含指定值的测试代码如下:
it('should contain x', () => { const myArray: string[] = myFunction(); expect(myArray).toContain('x'); });
当测试运行失败时,Jest默认会截断过长的数组输出,只展示部分内容:
Expected value: "x" Received array: ["a", "b", "c", "d", "e", "f", "g", "h", ...]
这种截断会提升排查问题的难度,需要强制Jest打印完整的接收数组内容。
解决方法
1. 修改Jest全局配置调整序列化阈值
Jest底层依赖pretty-format做值的序列化输出,默认对数组、字符串的最大展示长度做了限制,修改对应配置即可放开截断限制。
在jest.config.js/jest.config.ts配置文件中添加如下配置,将数组、字符串的最大展示长度设置为足够大的数值即可:
/** @type {import('jest').Config} */ module.exports = { // 其余原有配置保持不变 snapshotFormat: { maxArrayLength: 100000, // 根据实际测试的数组长度调整 maxStringLength: 100000, } }
如果使用Jest 28及更早版本,直接在配置中设置expand: true即可展开全量输出。
2. 运行测试时追加展开参数
执行测试命令时追加--expand参数,可临时让Jest展开所有diff和输出内容,不做折叠截断:
# 示例:运行对应测试文件时全量展示输出 npx jest your-test-file.test.ts --expand
3. 断言前手动打印全量数组
如果不想修改全局配置,也不想调整运行参数,可以在断言前增加判断,当数组不包含目标值时手动打印完整数组,再执行断言:
it('should contain x', () => { const myArray: string[] = myFunction(); // 断言前做判断,不满足预期时先打印全量日志 if (!myArray.includes('x')) { console.log('完整接收数组:', JSON.stringify(myArray, null, 2)); } expect(myArray).toContain('x'); });
这种方式灵活性最高,只会在对应测试用例失败时打印全量内容,不会影响其他测试用例的输出。
内容的提问来源于stack exchange,提问作者Elias Schoof
相关产品推荐
相关产品推荐

