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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:06:23