#javascript #mocha.js
#javascript #mocha.js
Вопрос:
Я тестирую с 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:
Это просто потому, что в JavaScript сравнение объектов выполняется по ссылке, а не путем глубокой проверки на равенство.
Примеры :
[] == [] // false
[1] == [1] // false
({} === {}) // false
Вместо этого вы можете использовать assert.deepEqual
, который будет делать то, что вы ожидаете.
(на всякий случай, если вам интересно, я вставил круглые скобки {}
, чтобы сделать их выражением, вместо того, чтобы делать первый {}
блок блоком ( {}; === {}
таким образом, код будет недействительным))