Jasmine.js'de iki dizinin eşit olup olmadığını kontrol etmenin bir yolu var mı, örneğin:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
İkisi de işe yaramıyor.
Jasmine.js'de iki dizinin eşit olup olmadığını kontrol etmenin bir yolu var mı, örneğin:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
İkisi de işe yaramıyor.
Yanıtlar:
Sadece testi yaptım ve toEqual
lütfen testimi bul:
describe('toEqual', function() {
it('passes if arrays are equal', function() {
var arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
});
Sadece bilgi için:
toBe () ve toEqual (): toEqual () denkliği denetler. toBe () ise aynı nesne olduklarından emin olur.
toBeCloseTo(expected,2)
ama işe yaramıyor.
Dizinin bazı değerleri varsa, aşağıdaki gibi bir diziyi karşılaştırabilirsiniz
it('should check if the array are equal', function() {
var mockArr = [1, 2, 3];
expect(mockArr ).toEqual([1, 2, 3]);
});
Ancak bazı işlevlerden döndürülen dizi 1'den fazla öğeye sahipse ve tümü sıfırsa, şunu kullanarak doğrulayın:
expect(mockArray[0]).toBe(0);
sadece kayıt için her zaman JSON.stringify kullanarak karşılaştırabilirsiniz
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]));
Her şey lezzet ölçer, bu aynı zamanda karmaşık gerçek nesneler için de işe yarayacak
Dizilerden birinin değiştirildiği benzer bir sorunum vardı. Bunu için kullanıyordum $httpBackend
ve bundan dönen nesne aslında $promise
dizi ( Array
nesne değil ) içeren bir nesneydi.
Bir toBeArray
işlev oluşturarak diziyle eşleşecek bir yasemin eşleştiricisi oluşturabilirsiniz :
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);
}
});
});
Ve sonra sadece diğer yasemin eşleştiricileri gibi testlerinizde kullanın:
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]
çünkü yalnızca ilk x.length
öğeleri kontrol eder . if (x.length !== y.length) { return false; }
Önceden kontrol ederek bunu düzeltebilirsiniz .
for (var i; ...)
=> x[undefined]
, var arraysAreSame = function ... var arraysAreSame = true
:(
expect([1]).toBeArray([2])
. Ve ayrıca başka herhangi bir dizi, çünküundefined + 1 => NaN