Javascript:断言与极其相等的值导致不同

问题描述 投票:0回答:1

我有这个Javascript代码:

const BaseList = {

  new: function(list) {
    this.list = list;
    return this;
  },

  sortKeys: function(key) {
    const keys = Object.keys(this.list);
    keys.push(key);
    keys.sort();
    return keys;
  }

}

module.exports = BaseList;

我正在用Mocha / Assert测试sortKeys这样做:

describe('#sortKeys', function() {

  it('should insert a new key in order', function() {
    const par = {'a': 'test_a', 'c': 'test_c'};
    const bl = BaseList.new(par);
    const sl = bl.sortKeys('b');
    assert.equal(sl,['a','b','c']);
  });

});

碰巧我的测试失败,但失败消息说:

AssertionError [ERR_ASSERTION]: [ 'a', 'b', 'c' ] == [ 'a', 'b', 'c' ]

似乎我们有两个相同的数组,但断言说它们是不同的。

我在这里错过了什么?

javascript testing mocha assert
1个回答
1
投票

在javascript中,对象实例(所以数组)永远不会相等,即使它们目前包含相同的数据。这是因为JS通过引用而不是按值来比较对象。

对于简单的解决方案,只需使用:

assert.equal(sl.toString(),['a','b','c'].toString());

为了更好/更灵活的解决方案:How to compare arrays in JavaScript?

© www.soinside.com 2019 - 2024. All rights reserved.