Ожидание жасмина не соответствует результат массива
Я пытаюсь следующий код:
describe("array deletion", function () {
it("leaves a hole in middle", function () {
var array = ['one','two','three'];
delete array[1]; //'two' deleted
expect(array).toEqual(['one',undefined,'three']);
});
});
Это ожидание не удается, но почему? не должно ли это быть равным?
1 ответ
Существует разница в JavaScript между массивом, который имеет 3 элемента, один из которых undefined
и массив, который имеет только 2 элемента. Например
var a = [1,2,3];
delete a[1];
a.forEach(function(x) { console.log(x); });
// writes 1 3
[1,undefined,3].forEach(function(x) { console.log(x); })
// writes 1 undefined 3
также
1 in a
// returns false
1 in [1,undefined,2]
// returns true
Источник всегда на вашей стороне, если вы посмотрите на toEquals
код соответствия, вы найдете, что он использует eq
Функция из следующего исходного файла (она немного длинная, поэтому я предоставляю только ссылку, в нижней части находится часть, которая сравнивает объекты и массивы: https://github.com/jasmine/jasmine/blob/79206ccff5dd8a8b2970ccf5a6429cdab2c6010a/src/core/matchers/matchersUtil.js).