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

时间:2017-12-21 05:28:57

标签: javascript testing mocha assert

我有这个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' ]

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

要获得更好/更灵活的解决方案:How to compare arrays in JavaScript?