O ile mi zrozumieć, oto kilka rzeczy, które znalazłem na jasmine.matchersUtil.equals
i ===
:
definicji ===
porównuje dwa podmioty na podstawie jego value
i type
. Jest to operator porównania strict
. Dla ex:
2 === 2 //true
2 === 3 //false
2 === '2' //false
0 === -0 //true
(Sample scenario where +0, 0 and -0 can appear)
Z drugiej strony, jasmine.matchersUtil.equals
jest realizowany w oparciu o _.isEqual
logiką underscore.js i testów dla równości w oparciu o logikę, która określa, czy podmioty przekazywane do niej powinny być uznawane za równe nawet jeśli ich types
są różne. Coś takiego -
jasmine.matchersUtil.equals(2, 2) //true
jasmine.matchersUtil.equals(2, 3) //false
jasmine.matchersUtil.equals(2, '2') //false
jasmine.matchersUtil.equals(0, -0) //false
Oto wyciąg z niego z repo git -
// Identical objects are equal. `0 === -0`, but they aren't identical.
if (a === b) { return a !== 0 || 1/a == 1/b; }
EDIT: Dodatkową zaletą jasmine.matchersUtil.equals()
jest to, że możemy rzeczywiście realizować własne testerów zwyczaj równości, tak aby można uniknąć kilku scenariuszy, które mogą powodować problemy. Oto próbka tester zwyczaj równości, który jest używany w poniższych przykładach -
var customTester = function(first, second) {
return first == second;
};
kilka scenariuszy -
Załóżmy, że jeśli istnieje potrzeba, aby sprawdzić, jeśli tekst elementem jest pusta lub ma jakąś konkretną wartość a tam jest dopasowujący zwyczaj jaśmin opracowany dla niego, a następnie -
"5" === 5 //if operation on elem returns "5" then custom matcher gives false
jasmine.matchersUtil.equals("5", 5, customTester) //true when implemented with custom equality testers
undefined === null //if operation on elem returns undefined then custom matcher gives false
jasmine.matchersUtil.equals("", null, customTester) //true when implemented with custom equality testers
NaN === NaN //if operation on elem returns NaN then custom matcher gives false
jasmine.matchersUtil.equals(NaN, NaN) //true
Sprawdzenie równości obiektów jest łatwiejsze przy użyciu niestandardowych dopasowujących.Dla ex:
{name: 'hill'} === {name: 'hill'} //false
jasmine.matchersUtil.equals({name: 'hill'}, {name: 'hill'}) //true
Check for equality of element's return value with regular expressions is easier using custom matchers rather than implementing the logic using ===
.
Comparison of constructors is easier.
Verification of errors is handled if an error occurrence needs to be tested by passing the error object to the custom matcher.
Zawsze stosować niestandardowych dopasowujących gdy wiedzieliśmy, że mogą istnieć różne wartości inne niż oczekiwane czyjegoś które mogą się pojawić lub może wystąpić którykolwiek z powyższych warunków. Jeśli oczekiwanie jest gwarantowane jako pojedyncza wartość, to używanie wartości ===
ma sens. Mam nadzieję, że to pomoże.