Чи є спосіб у jasmine.js перевірити, чи рівні два масиви, наприклад:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ні, здається, не працює.
Чи є спосіб у jasmine.js перевірити, чи рівні два масиви, наприклад:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ні, здається, не працює.
Відповіді:
Щойно зробив тест, і він працює toEqual
будь ласка, знайдіть мій тест:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Тільки для інформації:
toBe () проти toEqual (): toEqual () перевіряє еквівалентність. toBe (), з іншого боку, переконується, що вони точно той самий об’єкт.
toBeCloseTo(expected,2)
але, схоже, це не працює.
Ви можете порівняти масив, як зазначено нижче, якщо масив має деякі значення
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Але якщо масив, який повертається з якоїсь функції, має більше 1 елемента, і всі дорівнюють нулю, то перевірте за допомогою
expect(mockArray[0]).toBe(0);
тільки для запису ви завжди можете порівнювати за допомогою JSON.stringify
const arr = [1,2,3];
expect(JSON.stringify(arr)).toBe(JSON.stringify([1,2,3]));
expect(JSON.stringify(arr)).toEqual(JSON.stringify([1,2,3]));
Це все метр смаку, це також буде працювати для складних буквальних об’єктів
У мене була подібна проблема, коли один з масивів був змінений. Я використовував це для $httpBackend
, і повернутий об'єкт з цього був фактично $promise
об'єктом, що містить масив (а не Array
об’єкт).
Ви можете створити матч жасмину для відповідності масиву, створивши toBeArray
функцію:
beforeEach(function() {
'use strict';
this.addMatchers({
toBeArray: function(array) {
this.message = function() {
return "Expected " + angular.mock.dump(this.actual) + " to be array " + angular.mock.dump(array) + ".";
};
var arraysAreSame = function(x, y) {
var arraysAreSame = true;
for(var i; i < x.length; i++)
if(x[i] !== y[i])
arraysAreSame = false;
return arraysAreSame;
};
return arraysAreSame(this.actual, array);
}
});
});
А потім просто використовуйте його у своїх тестах, як і інші відповідники жасмину:
it('should compare arrays properly', function() {
var array1, array2;
/* . . . */
expect(array1[0]).toBe(array2[0]);
expect(array1).toBeArray(array2);
});
x=[1,2]
, y=[1,2,3]
оскільки вона перевіряє лише перші x.length
елементи. Ви можете це виправити, if (x.length !== y.length) { return false; }
попередньо перевіривши .
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. А також будь-який інший масив справді, тому щоundefined + 1 => NaN