首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jasmine.matchersUtil.equals对===

jasmine.matchersUtil.equals对===
EN

Stack Overflow用户
提问于 2015-10-13 23:47:14
回答 1查看 849关注 0票数 13

我们开发了一套相当大的定制茉莉花匹配器,它可以帮助我们的代码更加简洁,避免代码重复。我注意到一些定制的茉莉匹配器使用===等式测试,还有一些jasmine.matchersUtil.equals。示例:

代码语言:javascript
运行
复制
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===等式测试有什么不同,哪种方法应该是首选的?

换句话说,一般来说,如果我们只使用===,我们会面临风险吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 14:14:52

据我所知,下面是我为jasmine.matchersUtil.equals===找到的一些东西:

根据定义,===根据其valuetype对这两个实体进行比较。它是一个strict比较运算符。前任:

代码语言:javascript
运行
复制
2 === 2 //true
2 === 3 //false
2 === '2' //false
0 === -0 //true 

(可以出现+0、0和-0的示例场景)

另一方面,jasmine.matchersUtil.equals是基于欠记分器的_.isEqual逻辑实现的,并且基于确定传递给它的实体是否应该被认为是相等的逻辑进行平等测试,即使它们的types是不同的。就像这样-

代码语言:javascript
运行
复制
jasmine.matchersUtil.equals(2, 2) //true
jasmine.matchersUtil.equals(2, 3) //false
jasmine.matchersUtil.equals(2, '2') //false
jasmine.matchersUtil.equals(0, -0) //false

这是它的一个摘录,从盖特回购-

代码语言:javascript
运行
复制
// Identical objects are equal. `0 === -0`, but they aren't identical.
if (a === b) { return a !== 0 || 1 / a == 1 / b; }

编辑:添加了jasmine.matchersUtil.equals()的优点,即我们实际上可以实现我们自己的自定义等式测试器,这样就可以避免被认为会产生问题的几种场景。下面是一个自定义等式测试器的示例,下面的例子是-

代码语言:javascript
运行
复制
var customTester = function(first, second) {
    return first == second;
};

很少有场景-

  1. 假设需要检查元素文本是否为空或具有特定值,并且为其开发了自定义的茉莉花匹配器,那么- "5“=== 5 //if对elem的操作返回"5”然后自定义匹配器给出假jasmine.matchersUtil.equals("5",5,customTester) //true当使用自定义等式测试器实现时,未定义的=== null /if操作返回未定义的=== null/if操作返回未定义的自定义匹配器给出虚假jasmine.matchersUtil.equals(“,null,customTester) /true当与自定义相等的测试器NaN === NaN //if操作实现时,elem上的操作返回NaN,然后自定义匹配器会产生假jasmine.matchersUtil.equals(NaN,NaN) //true。
  2. 使用自定义匹配器检查对象的相等性更容易。前任: {name:'hill'} === {name:'hill'} //false jasmine.matchersUtil.equals({name:'hill'},{name:'hill'}) //true
  3. 比较构造函数更容易。
  4. 如果需要通过将错误对象传递给自定义匹配程序来测试错误发生,则将处理错误验证。

我们总是使用自定义匹配时,当我们知道可能会有不同的值,而不是预期的一个可能出现,或任何上述条件可能发生。如果预期值保证为单个值,那么使用===是有意义的。希望能帮上忙。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33114417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档