javascript - 有没有办法在自定义匹配器中使用 Jasmine 默认匹配器?

标签 javascript unit-testing jasmine matcher

我在一些 Jasmine 测试规范中有一个自定义匹配器,形式如下:

this.addMatchers({
    checkContains: function(elem){
        var found = false;
        $.each( this.actual, function( actualItem ){

            // Check if these objects contain the same properties.
            found = found || actualItem.thing == elem;
        });
        return found;
    }
});

当然,actualItem.thing == elem 实际上并没有比较对象内容——我必须使用 Object comparison in JavaScript 中更复杂的解决方案之一。 .

不过,我不禁注意到 Jasmine 已经有了一个不错的对象相等性检查器:expect(x).toEqual(y) .有没有办法在自定义匹配器中使用它?有没有在自定义匹配器中使用匹配器的通用方法?

最佳答案

是的,这有点 hacky 但完全有可能。

我们需要做的第一件事是使 Jasmine.Env 类可用。就我个人而言,我已经在我的 SpecRunner.html 中完成了这项工作,因为它已经在那里设置好了。在我的 SpecRunner 的负载上,我运行了以下脚本:

(function() {
      var jasmineEnv = jasmine.getEnv();
      jasmineEnv.updateInterval = 1000;

      var trivialReporter = new jasmine.TrivialReporter();

      jasmineEnv.addReporter(trivialReporter);

      jasmineEnv.specFilter = function(spec) {
        return trivialReporter.specFilter(spec);
      };

      var currentWindowOnload = window.onload;

      window.onload = function() {
        if (currentWindowOnload) {
          currentWindowOnload();
        }
        execJasmine();
      };

      function execJasmine() {
        jasmineEnv.execute();
      };

    })();

所以在 execJasmine 函数声明之后,我通过添加以下内容将 jasmineEnv 插入全局命名空间:

this.jasmineEnv = jasmineEnv;

现在,在我的任何规范文件中,我都可以访问 jasmineEnv 变量,它包含匹配器核心代码。

具体来看 toEqual,toEqual 调用 jasmine.Env.prototype.equals_ 函数。这意味着在您的 customMatcher 中,您可以执行以下操作:

beforeEach(function(){
    this.addMatchers({
        isJasmineAwesome    : function(expected){
            return jasmineEnv.equals_(this.actual, expected);
        }
    });
});

不幸的是,使用此方法只会让您访问以下方法:

  1. 比较对象_
  2. 等于_
  3. 包含_

其余的匹配器位于 jasmine.Matchers 类中,但我还不能将其公开。我希望这能以某种方式帮助你

关于javascript - 有没有办法在自定义匹配器中使用 Jasmine 默认匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947787/

相关文章:

javascript - 使用不同的 URL 进行 POSTing 以创建模型的主干方法是什么?

Python的unittest和动态创建测试用例

javascript - 使用 Jasmine 测试函数是否在 ES6 构造函数中执行

Javascript 正则表达式将文本格式化为千位(包括小数)

javascript - 从网络加载文本文件,并用脚本解析它?

rest - SoapUI - 带有查询参数的 REST Mocking

python - 每次访问时更改的模拟属性

node.js - npm run 在哪里寻找脚本?

angular - Async beforeEach 在每个测试单元之前/之后完成

javascript - 如何从 javascript 调用 python 脚本?