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

如何断言两个对象深度相等且允许指定字段为数字或null

原有方案的问题

  1. 你现在用的delete删除属性的写法会直接修改原始的obj1和obj2对象,如果后续代码还需要用到这两个对象的c字段,会出现隐性bug,非常不推荐。
  2. 原有代码里用的within方法是用来校验数字区间的,枚举值校验应该用oneOf方法。

更合理的实现方案

方案1:Chai 4.4.0+ 版本一行实现(无副作用)

高版本Chai支持断言占位符,直接在深度相等的结构里指定c字段的取值规则,全程不会修改原对象:

expect(obj1).to.deep.equal({
  ...obj2,
  c: expect.to.be.oneOf([3, null])
})

方案2:低版本Chai兼容写法

如果用的是旧版本Chai不支持占位符,可以用ES6解构赋值提取剩余字段对比,同样不会修改原对象:

// 单独校验c字段符合取值要求
expect(obj1.c).to.be.oneOf([3, null])
// 解构提取除c外的其余字段做深度相等校验
const { c: _, ...restObj1 } = obj1
const { c: __, ...restObj2 } = obj2
expect(restObj1).to.deep.equal(restObj2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:36:02