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

Jest快照测试:日期字符串字段匹配expect.any/anything失败原因

Jest快照测试日期字符串不通过的原因及解决方法

核心原因分析

  1. expect.any(Date)匹配错误
    你的startDate字段实际是字符串类型(比如"2023-12-18T23:23:16.731-07:00"),但expect.any(Date)只匹配Date类的实例对象,类型完全不匹配,所以测试直接失败。

  2. expect.anything()测试失败是因为未更新快照
    当你在toMatchSnapshot中使用不对称匹配器(比如expect.anything())时,旧快照里保存的是之前生成的具体日期字符串,Jest会拿这个固定值和匹配器的占位符对比,自然出现差异。这时候必须更新快照,让Jest把匹配器的规则记录到快照里,而不是固定的字符串。

解决步骤

1. 使用正确的匹配器

针对字符串类型的日期,用expect.any(String)匹配最基础的类型:

expect(reducer(initialModel, action)).toMatchSnapshot({
  startDate: expect.any(String),
});

如果需要更严格的格式校验(比如确保是ISO日期格式),可以用正则匹配:

expect(reducer(initialModel, action)).toMatchSnapshot({
  startDate: expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[+-]\d{2}:\d{2}$/),
});

2. 更新快照

运行Jest的快照更新命令,让新的匹配规则覆盖旧快照:

jest --updateSnapshot
# 或者简写
jest -u

更新后,快照里的startDate会被替换成匹配器的占位符,后续测试只要字段符合匹配规则就会通过,不用再担心日期动态变化导致的失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:39:56