Есть ли способ в jasmine.js проверить, равны ли два массива, например:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Ни то, ни другое не работает.
javascript
jasmine
user2032804
источник
источник
toBeCloseTo(expected,2)
но это не сработало.Вы можете сравнить массив, как указано ниже, если массив имеет некоторые значения
Но если массив, возвращаемый какой-либо функцией, содержит более 1 элемента, и все они равны нулю, то проверьте с помощью
источник
просто для записи вы всегда можете сравнить, используя 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
функцию:А затем просто используйте его в своих тестах, как и другие жасминовые сопоставители:
источник
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