Ожидание жасмина не соответствует результат массива

Я пытаюсь следующий код:

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).

Другие вопросы по тегам