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

Jest中toBe比对显示值相同的字符串时断言失败问题排查

问题原因

报错里两个值视觉上都是PK但断言失败,本质是控制台不会渲染不可打印的ASCII控制字符,两个字符串的实际内容并不相等:

  • 你定义的预期值'PK'是长度为2的字符串,仅包含P、K两个可打印字母
  • 你截取了Buffer前4字节转字符串,而ZIP格式的标准文件头魔数前4字节为0x50 0x4B 0x03 0x04:前两个字节对应字符P、K,后两个字节是不可打印的控制字符,转成字符串后不会在Jest的报错输出里显示,视觉上和纯PK没有区别,但实际这个返回值字符串长度是4,和长度为2的预期值用Object.is比对自然返回false。
修复方法

二选一即可:

  • 方案1:调整截取长度,只取前2字节转字符串做比对,和预期值长度对齐
const zipMagicNumber: string = 'PK'
// 仅截取前2个字节转字符串
const uploadedMagicNumber: string = uploadMock.mock.calls[0][0].Body.subarray(0, 2).toString()
expect(zipMagicNumber).toBe(uploadedMagicNumber)
  • 方案2(推荐):直接比对二进制Buffer值,跳过字符串转码步骤,这也是校验文件魔数的通用稳妥写法,不会被编码、隐式字符这类问题干扰:
// ZIP格式标准前4字节魔数
const zipMagicHeader = Buffer.from([0x50, 0x4B, 0x03, 0x04])
const uploadedHeader = uploadMock.mock.calls[0][0].Body.subarray(0, 4)
expect(uploadedHeader.equals(zipMagicHeader)).toBe(true)

排查这类肉眼看不出差异的字符串问题时,直接打印字符串的.length属性,或者把字符串转回Buffer查看字节值,就能快速定位到隐藏的不可见字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:27:23