Насколько я понимаю, вот несколько вещей, которые я нашел для jasmine.matchersUtil.equals
и ===
:
По определению, ===
сравнивает два объекта, основываясь на своем value
и type
. Его оператор сравнения strict
. Для экс:
2 === 2 //true
2 === 3 //false
2 === '2' //false
0 === -0 //true
(Sample scenario where +0, 0 and -0 can appear)
С другой стороны, jasmine.matchersUtil.equals
осуществляются на основе _.isEqual
логики underscorejs и тестов для равенства на основе логики, которая определяет, будет ли субъекты, переданные ему следует считать равными даже если их types
отличаются. Что-то вроде этого -
jasmine.matchersUtil.equals(2, 2) //true
jasmine.matchersUtil.equals(2, 3) //false
jasmine.matchersUtil.equals(2, '2') //false
jasmine.matchersUtil.equals(0, -0) //false
Вот выдержка из него от мерзавца репо -
// Identical objects are equal. `0 === -0`, but they aren't identical.
if (a === b) { return a !== 0 || 1/a == 1/b; }
EDIT: Добавлено преимущество jasmine.matchersUtil.equals()
в том, что мы действительно можем реализовать наши собственные тестеры пользовательские равенства, так что можно избежать нескольких сценариев, которые, как считается, создают проблемы. Вот пример тестера пользовательского равенства, который используется с ниже примеров -
var customTester = function(first, second) {
return first == second;
};
Несколько сценариев -
Предположим, если есть необходимость проверить, если элемент текста пуст или имеет определенное значение и есть согласовани заказа жасмин разработана для него, а затем -
"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
Проверка равенства объектов проще с помощью пользовательского matchers.Для экс:
{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.
Мы всегда использовали пользовательские matchers всякий раз, когда мы знали, что там может быть другими, чем ожидаемая СВОИМИ различными значениями которые могут возникнуть, или любое из вышеуказанных условий может произойти. Если ожидаемое значение гарантируется как одно значение, то использование ===
имеет смысл. Надеюсь, поможет.