柴-期望对象具有数组忽略顺序的深层属性

时间:2018-11-13 07:10:49

标签: javascript node.js testing chai

我需要检查payment是否具有名为transactions且具有期望值的属性:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

[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。