Mocha说assert.equal([0,0],[0,0])失败了。为什么?

时间:2014-06-28 09:12:29

标签: javascript mocha

我正在使用mocha进行测试,某些模块有一些行为。例如,我想要那个

var module = new Module()
module.getSomething()

将返回[0,0]。所以,我试图测试它:

var assert = require('assert')
  , Module = require('../lib/module')
describe('Module()', function () {
    describe('#getSomething()', function () {
        it('should return [0,0] by default', function () {
            var map = new Module()
            assert.equal([0, 0], map.getCenter()[0])
        })
    })
})

测试失败。经过一番尝试,......我陷入了这个考验:

var assert = require('assert')
describe('[0,0]', function () {
    it('should be equals to [0,0]', function () {
        assert.equal([0, 0], [0, 0])
    })
})

嗯,我想我在javascript中有一些差距。好吧,我需要创建一个模块,在某些时候返回像{x:0,y:0}这样的小对象。有人可以解释我测试这些东西的方法吗?这种方式有效,......是正确的吗?

describe('#getCenter()', function () {
    it('should return [0,0] by default', function () {
        var map = new Map()
        assert.equal(0, map.getCenter().x)
        assert.equal(0, map.getCenter().y)
    })
})

1 个答案:

答案 0 :(得分:1)

这只是因为,在JavaScript中,对象的比较是通过引用而不是通过深度相等检查来完成的。

示例:

[] == [] // false
[1] == [1] // false
({} === {}) // false

相反,您可以使用assert.deepEqual,这将达到预期效果。

(以防万一你想知道,我把括号括在{}左边,使它成为一个表达式,而不是让第一个{}成为一个块(代码将是{}; === {}因此无效))