【问题标题】:Why is this test failing? Array should equal [] [duplicate]为什么这个测试失败了?数组应等于 [] [重复]
【发布时间】:2016-10-02 12:41:57
【问题描述】:

我的测试,在 alerts var 下面是一个空数组 [] 但是这会引发错误。

it('FeedFactory alerts array is filled', function() {
    var alerts = FeedFactory.returnAlerts();
    console.log('alerts',alerts);
    expect(alerts).to.equal([]);
});

这是我注释掉最后expect(alerts).to.equal([]); 行时的测试日志。

我的工厂代码

var alerts = [];

var feedFactory = {
    alerts       : alerts,
    getFeed      : getFeed,
    returnAlerts : returnAlerts,
    saveFilters  : saveFilters,
    getFilters   : getFilters
};

function returnAlerts() {
    return alerts;
}

【问题讨论】:

    标签: javascript testing mocha.js chai


    【解决方案1】:

    因为[] !== [] && [] != []。 JS 对象之间不是松散或严格相等的,所以expect([]).to.equal([]) 总是会失败。

    您应该使用更深层次的相等形式,例如deep(或其令人困惑的简写,eql)或members

    expect([1, 2, 3]).to.deep.equal([1, 2, 3])
    expect([1, 2, 3]).to.include.members([1, 2])
    

    【讨论】:

    • 谢谢!我发现这行得通expect(alerts).to.eql(array);chaijs.com/api/bdd/#method_eql 9 分钟!
    • @LeonGaban to.eql 等同于 to.deep.equal 但令人困惑,IMO。我会在答案中提到它。
    • 知道了,.deep 更明确
    【解决方案2】:

    两个空数组彼此不相等,因为每个数组都有不同的引用,因为所有对象(以及与此相关的数组)都被引用而不是复制。 检查对象是否相等是检查引用而不是内部内容

    机会:

    var a = [];
    var b = [];
    console.log(a == b) //false
    

    我将使用警报数组的长度来测试它是否为空数组。通过写作:

    expect(alerts.length).to.equal(0);
    

    为了检查数组的内容是否等于另一个数组的另一个内容,您必须使用深度检查,它检查数组的每个值是否等于另一个数组中的值(相当昂贵)。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多