自訂非對稱等式測試器
Jasmine 提供多個非對稱等式測試器,例如 jasmine.any()
和 jasmine.objectContaining()
。在有幫助的時候,你可以建立你自己的自訂非對稱等式測試器,來囊括測試邏輯。
要開始,請建立一個回傳物件的函式。該物件必須提供一個 asymmetricMatch
函式。
function multipleOf(number) {
return {
/*
* The asymmetricMatch function is required, and must return a boolean.
*/
asymmetricMatch: function(compareTo) {
return compareTo % number === 0;
},
/*
* The jasmineToString method is used in the Jasmine pretty printer. Its
* return value will be seen by the user in the message when a test fails.
*/
jasmineToString: function() {
return '<multipleOf: ' + number + '>';
}
};
}
在定義完你的自訂非對稱等式測試器後,你可以在測試中使用它。
spyOn(Buffer, 'alloc').and.callThrough();
Buffer.alloc(2048);
expect(Buffer.alloc).toHaveBeenCalledWith(multipleOf(1024));
就像 Jasmine 內建的非對稱等式測試器一樣,你的測試器可以巢狀在陣列或物件中,並且仍然可以正確運作。
spyOn(request, 'post');
request.post({ name: 'Jan Jansen', age: 40 });
expect(request.post).toHaveBeenCalledWith({ name: jasmine.any(String), age: multipleOf(10) });
就像 Jasmine 內建的非對稱等式測試器一樣,你的測試器可以在 Jasmine 執行等式檢查的任何地方使用。
expect(10).toEqual(multipleOf(5));
expect({ x: 3, y: 9 }).toEqual({ x: multipleOf(3), y: multipleOf(3) });