首页 > 解决方案 > Chai - 期望一个对象具有数组忽略顺序的深层属性

问题描述

我需要检查是否有一个以预期值payment命名的属性:transactions

expect(payment).to.have.deep.property('transactions', [
    TRANSACTION_ID_1,
    TRANSACTION_ID_2,
]);

由于transactions未指定顺序,因此测试不会一直通过。

如何在不更改测试结构的情况下解决问题?

注意:我找到了deep-equal-in-any-order插件,但似乎没有帮助。

标签: javascriptnode.jstestingchai

解决方案


遍历数组并检查它是否包含每个项目。

[TRANSACTION_ID_1, TRANSACTION_ID_2].forEach(id => {
  expect(payment).to.have.deep.property('transactions').that.includes(id);
});

如果您需要检查transactions预期 ID 的无序数组,那么还要检查长度。

expect(payment).to.have.deep.property('transactions').that.has.lengthOf(2);

transactions具有所有预期 id 并且具有相同长度的预期 id 时,则在正确排序时等于预期 id。


推荐阅读