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

如何在Jest中测试类实例与对象的严格相等(无需逐个断言)?

解决思路与方案

方案1:将普通对象转换为DummyClass实例

如果必须让普通对象成为类的实例,有两种实用方式:

快速转换(无需修改类)

用Object.create创建一个带有DummyClass原型的空对象,再把普通对象的所有属性赋值进去:

const plainObj = { /* 你的海量数据对象 */ };
const instanceLikeObj = Object.assign(Object.create(DummyClass.prototype), plainObj);

这样instanceLikeObj的原型链和new DummyClass()生成的实例完全一致,用toStrictEqual断言就能顺利通过。

规范转换(修改类构造函数)

如果有权修改DummyClass的构造函数,可以让它支持从对象初始化属性,更符合类的设计逻辑:

class DummyClass {
  constructor(obj = {}) {
    // 将传入对象的属性全部挂载到实例上
    Object.assign(this, obj);
  }
}

// 直接用普通对象生成合规实例
const convertedInstance = new DummyClass(plainObj);

方案2:跳过原型检查,仅对比属性

如果不需要转换对象,只是想让断言通过,解构实例得到普通对象是最省心的方法,完美适配数据量大的场景:

test('实例与普通对象属性完全一致', () => {
  const myInstance = new DummyClass();
  const plainObj = { /* 你的大对象 */ };
  
  // 解构实例得到普通对象,再和plainObj做严格属性对比
  expect({ ...myInstance }).toStrictEqual(plainObj);
});

解构操作会提取实例的所有自身可枚举属性到新的普通对象中,此时toStrictEqual只会对比属性内容,完全忽略原型差异。你也可以用Object.assign({}, myInstance)代替解构,效果完全相同。

内容的提问来源于stack exchange,提问作者s.khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:28