我们开发了一套相当大的定制茉莉花匹配器,它可以帮助我们的代码更加简洁,避免代码重复。我注意到一些定制的茉莉匹配器使用===
等式测试,还有一些jasmine.matchersUtil.equals
。示例:
toHaveHandCursor: function() {
return {
compare: function(actual) {
return {
pass: actual.getCssValue("cursor").then(function(cursor) {
return cursor === "pointer";
})
};
}
};
},
toBeActive: function() {
return {
compare: function(elm) {
return {
pass: protractor.promise.all([
elm.getId(),
browser.driver.switchTo().activeElement().getId()
]).then(helpers.spread(function (currentElementID, activeElementID) {
return jasmine.matchersUtil.equals(currentElementID, activeElementID);
})),
message: "Element is not active."
};
}
};
}
问题:
jasmine.matchersUtil.equals
和===
等式测试有什么不同,哪种方法应该是首选的?
换句话说,一般来说,如果我们只使用===
,我们会面临风险吗?
发布于 2015-10-14 06:14:52
据我所知,下面是我为jasmine.matchersUtil.equals
和===
找到的一些东西:
根据定义,===
根据其value
和type
对这两个实体进行比较。它是一个strict
比较运算符。前任:
2 === 2 //true
2 === 3 //false
2 === '2' //false
0 === -0 //true
另一方面,jasmine.matchersUtil.equals
是基于欠记分器的_.isEqual
逻辑实现的,并且基于确定传递给它的实体是否应该被认为是相等的逻辑进行平等测试,即使它们的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; }
编辑:添加了jasmine.matchersUtil.equals()
的优点,即我们实际上可以实现我们自己的自定义等式测试器,这样就可以避免被认为会产生问题的几种场景。下面是一个自定义等式测试器的示例,下面的例子是-
var customTester = function(first, second) {
return first == second;
};
很少有场景-
我们总是使用自定义匹配时,当我们知道可能会有不同的值,而不是预期的一个可能出现,或任何上述条件可能发生。如果预期值保证为单个值,那么使用===
是有意义的。希望能帮上忙。
https://stackoverflow.com/questions/33114417
复制