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

Jest测试:如何对对象公共属性设置不同期望取值?

如何针对返回对象的公共键设置不同期望值(E2E测试断言)

我正在进行E2E测试,想要验证返回对象中的部分数据。目前我的断言代码如下:

expect(response.body).toEqual(
  expect.objectContaining({ ...result, passsword: expect.any(String) }),
);

请问有没有人知道,如何针对对象的公共键设置不同的期望值?


你可以直接在expect.objectContaining的对象参数里,给每个需要验证的键单独指定对应的匹配规则,主流测试框架(比如Jest)支持多种匹配器组合使用,完全能满足不同键的验证需求:

  • 固定值匹配:直接写预期的固定值,比如username: 'test_user'
  • 类型匹配:用expect.any(类型),比如你代码里的password: expect.any(String)(注意你代码里的passsword拼写错误,应为password)
  • 正则匹配:用expect.stringMatching(正则表达式),比如email: expect.stringMatching(/^[a-z0-9]+@example\.com$/)
  • 范围匹配:针对数字类型,用expect.greaterThan()/expect.lessThan(),比如age: expect.greaterThan(18)
  • 自定义匹配:通过expect.extend()扩展专属匹配器,应对特殊规则的字段

举个实际示例,假设要验证返回对象里的username是固定值、password为任意字符串、email符合指定格式、age大于18,代码可以这么写:

expect(response.body).toEqual(
  expect.objectContaining({
    username: 'arthur_d',
    password: expect.any(String),
    email: expect.stringMatching(/^arthur@example\.com$/),
    age: expect.greaterThan(18)
  })
);

如果你的result对象里已经包含部分固定值的键,也可以用扩展运算符合并,同时覆盖需要特殊规则的字段:

// 假设result里已有username、email的固定值,给password和age设置特殊规则
expect(response.body).toEqual(
  expect.objectContaining({
    ...result,
    password: expect.any(String),
    age: expect.lessThan(60)
  })
);

这样就能灵活给每个公共键设置不同的验证逻辑了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:12:09