2016-01-15 3 views
0

Я пытаюсь следующий код:жасмин ожидать не соответствующий результат массива

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']); 
    }); 
}); 

Это ожидание терпит неудачу, но почему? не должен ли он равняться?

+0

Как ожидание не удается? – alecxe

+0

Ожидание не сработает при запуске по адресу http://tryjasmine.com/ - вы могли бы предоставить дополнительную информацию об окружающей среде (узел/браузер, версии и т. Д.)? – Andy

+0

Я запускаю тесты под Karma v0.13.9, браузер Chrome 46.0.2490 (Windows 7 0.0.0). Узел v0.12.7 –

ответ

0

В JavaScript существует различие между массивом, состоящим из трех элементов: undefined и массива с двумя элементами. Например

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