我有这个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' ]
似乎我们有两个相同的数组,但断言说它们是不同的。
我在这里缺少什么?
答案 0 :(得分:1)
在javascript中,对象实例(所以数组)永远不会相等,即使它们目前包含相同的数据。这是因为JS通过引用而不是按值来比较对象。
对于一个简单的解决方案,只需使用:
assert.equal(sl.toString(),['a','b','c'].toString());
要获得更好/更灵活的解决方案:How to compare arrays in JavaScript?