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

Jest教程:如何测试对象的可选属性

如何在Jest中断言包含可选属性的对象?

嘿,这个问题我之前也碰到过!刚好可以给你两个靠谱的解决方案,看你用的Jest版本来选就行~

方案一:使用Jest 29+的expect.optional(推荐)

Jest 29及以上版本专门提供了expect.optional()API,完美适配这种可选属性的校验场景——属性存在时必须符合指定规则,不存在时也不会触发断言失败。

你只需要修改obj1的定义,把age用expect.optional()包裹起来:

const obj1 = {
  name: expect.any(String),
  age: expect.optional(expect.any(Number))
};

// 直接沿用你原来的断言语句即可
expect(response).toMatchObject(obj1);

这样不管后端返回的response里有没有age属性,只要存在时是数字类型,断言就会通过;如果age存在但不是数字,就会触发断言失败,完全匹配你的需求。

方案二:兼容旧版Jest(Jest < 29)

如果你还在使用Jest 29以下的版本,没有expect.optional(),可以分两步处理:先断言必填属性,再对可选属性做条件校验:

// 先断言必须存在的name属性符合要求
expect(response).toMatchObject({ name: expect.any(String) });

// 检查如果age存在,必须是数字类型
if ('age' in response) {
  expect(typeof response.age).toBe('number');
}

这种方式虽然多了一行代码,但兼容性更好,逻辑也足够清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:12