มีวิธีในการ 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);
}
});
});
และจากนั้นก็ใช้ในการทดสอบของคุณเช่นจัสมิน matchers อื่น ๆ :
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