如何在测试中对对象内数组进行无序严格相等断言?
问题描述
我有一个对象:
{ 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
相关产品推荐
相关产品推荐

