【问题标题】:Chai - Expect an object to have deep property of an array ignore orderChai - 期望一个对象具有数组忽略顺序的深层属性
【发布时间】:2018-11-13 07:10:48
【问题描述】:

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

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

由于没有指定transactions的顺序,所以测试并没有一直通过。

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

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

【问题讨论】:

    标签: javascript node.js testing chai


    【解决方案1】:

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

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

    【讨论】:

    • 不知道有没有不需要loop的解决方案
    • 我怀疑是否有。您可以对两个数组进行排序并断言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2011-10-22
    • 2020-11-21
    相关资源
    最近更新 更多