Javascript 带有量角器/WebDriverJS元素的Jasmine自定义匹配器

Javascript 带有量角器/WebDriverJS元素的Jasmine自定义匹配器,javascript,angularjs,selenium,jasmine,protractor,Javascript,Angularjs,Selenium,Jasmine,Protractor,各位开发者好 我想基于量角器/WebDriverJS元素创建自己的自定义匹配器。有人能改进我目前的代码吗 下面是我想在specs文件中写的内容 var button = element(by.tagName('button')) expect(button).toBeEnabled(); 这是我定制的茉莉花匹配器: 'use strict'; function matcher(util, customEqualityTesters) { return { compare : fu

各位开发者好

我想基于量角器/WebDriverJS元素创建自己的自定义匹配器。有人能改进我目前的代码吗

下面是我想在specs文件中写的内容

var button = element(by.tagName('button'))
expect(button).toBeEnabled();
这是我定制的茉莉花匹配器:

'use strict';

function matcher(util, customEqualityTesters) {
  return {
    compare : function (actual, expected) {
      var result = {};

      expect(actual.isEnabled()).toBeTruthy()

      result.pass = true;

      if (result.pass) {
        result.message = 'Expected element to be disabled';
      }
      else {
        result.message = 'Expected element to be enabled';
      }

      return result;
    }
  };
}

module.exports = matcher;
有没有更好的写作方法?因为目前,如果我有一个错误,我有以下消息:
预期false为true
。但是,我希望启用预期的元素


谢谢您的帮助。

不是专家,但我觉得Jasmine自定义匹配器是将匹配器作为键的对象。因此,必须使用对象键调用它。但是,您正在硬编码
result.pass=true值,这将导致在发生故障时永远不会执行您的
else
,并且您的语句
“预期元素将被启用”。
将永远不会被打印。下面是您可以改进它的方法-

'use strict';

var customMatchers = {
    toBeEnabled: function (util, customEqualityTesters) {
        return {
            compare : function (actual, expected) {
            var result = {};

            result.pass = actual.isEnabled();

            if (result.pass) {
                result.message = 'Expected element to be enabled';
            }
            else {
                result.message = 'Expected element to be disabled';
            }

              return result;
            }
        };
    }
}
下面是您可以使用它的方法-

var button = element(by.tagName('button'))
expect(button).toBeEnabled();

希望有帮助。

@prbaron如果它解决了您的问题,请将其标记为答案,以便帮助他人。谢谢