Apakah ada cara di jasmine.js untuk memeriksa apakah dua array sama, misalnya:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Sepertinya tidak ada yang berhasil.
Apakah ada cara di jasmine.js untuk memeriksa apakah dua array sama, misalnya:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Sepertinya tidak ada yang berhasil.
Jawaban:
Baru saja melakukan tes dan berhasil toEqual
tolong temukan tes saya:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Hanya untuk informasi:
toBe () versus toEqual (): toEqual () memeriksa kesetaraan. toBe (), di sisi lain, memastikan bahwa mereka adalah objek yang sama persis.
toBeCloseTo(expected,2)
tetapi sepertinya tidak berhasil.
Anda dapat membandingkan array seperti yang disebutkan di bawah ini jika array memiliki beberapa nilai
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Tetapi jika array yang dikembalikan dari beberapa fungsi memiliki lebih dari 1 elemen dan semuanya nol maka verifikasi dengan menggunakan
expect(mockArray[0]).toBe(0);
hanya untuk catatan Anda selalu dapat membandingkan menggunakan 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]));
Semua selerasa, ini juga akan berfungsi untuk objek literal yang kompleks
Saya punya masalah serupa di mana salah satu array dimodifikasi. Saya menggunakannya untuk $httpBackend
, dan objek yang dikembalikan dari itu sebenarnya adalah $promise
objek yang berisi array (bukan Array
objek).
Anda dapat membuat pencocokan melati untuk mencocokkan array dengan membuat toBeArray
fungsi:
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);
}
});
});
Dan kemudian gunakan saja dalam tes Anda seperti pencocokan melati lainnya:
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]
karena hanya memeriksa x.length
elemen pertama . Anda dapat memperbaikinya dengan memeriksa if (x.length !== y.length) { return false; }
sebelumnya.
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. Dan juga array lainnya, karenaundefined + 1 => NaN