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

如何在测试中对对象内数组进行无序严格相等断言?

问题描述

我有一个对象:

{
  Alice: ['Bob','Charlie']
}

我希望对该数组进行无序的断言测试。我尝试了以下写法:

expect(object).toEqual(
  expect.objectContaining({
    Alice: expect.arrayContaining(['Bob', 'Charlie'])
  })
);

该写法可生效,但允许数组包含额外的非预期数据。若使用:

expect(object).toEqual(
  {
    Alice: ['Bob', 'Charlie']
  }
);

则仅当数组元素按指定顺序排列时才会通过测试。我可以提取数组排序后再对比,但有没有更简洁的实现方式?

解决方案

可以结合expect.arrayContaining和toHaveLength断言,既保证数组包含所有预期元素,又限制数组长度与预期一致,以此避免出现额外非预期元素:

expect(object).toEqual(
  expect.objectContaining({
    Alice: expect.arrayContaining(['Bob', 'Charlie']).toHaveLength(2)
  })
);

如果你的测试框架版本不支持链式调用toHaveLength,可以拆分两个独立断言:

// 验证包含所有预期元素
expect(object.Alice).toEqual(expect.arrayContaining(['Bob', 'Charlie']));
// 验证数组长度匹配,排除额外元素
expect(object.Alice).toHaveLength(2);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:17:36