【问题标题】:How to add custom matchers to jasmine globally?如何在全球范围内向茉莉花添加自定义匹配器?
【发布时间】:2018-06-02 23:41:42
【问题描述】:

我需要替换 1.3 版中的 jasmine.addMatchers 函数。当前的 API 允许将匹配器添加到 describe 块中,但我希望能够在任何地方使用我的匹配器,而无需一次又一次地添加它们。

有没有一种全局的方法可以将自己的匹配器添加到 jasmine 3.1.0?

【问题讨论】:

  • 您是否尝试过创建匹配器模块并在您想使用它们的任何地方实例化它们?
  • @ManuelBlanco 不,我实际上不知道该怎么做。无论如何,我希望我的匹配器随处可用,无需任何额外工作,就像内置匹配器一样。

标签: javascript jasmine matcher jasmine-matchers


【解决方案1】:

https://github.com/JamieMason/add-matchers 可用于编写适用于所有 Jasmine 版本以及 Jest 的匹配器。

var addMatchers = require('add-matchers');

addMatchers({
  // matcher with 0 arguments
  toBeEvenNumber: function(received) {
    // received : 4
    return received % 2 === 0;
  },
  // matcher with 1 argument
  toBeOfType: function(type, received) {
    // type     : 'Object'
    // received : {}
    return Object.prototype.toString.call(received) === '[object ' + type + ']';
  },
  // matcher with many arguments
  toContainItems: function(arg1, arg2, arg3, received) {
    // arg1     : 2
    // arg2     : 15
    // arg3     : 100
    // received : [100, 14, 15, 2]
    return (
      received.indexOf(arg1) !== -1 &&
      received.indexOf(arg2) !== -1 &&
      received.indexOf(arg3) !== -1
    );
  }
});

【讨论】:

    【解决方案2】:

    请注意,我没有在 jasmine 3.1 中尝试过,但这就是我在 jasmine 2.8 中的做法:

    将其放置在测试之前运行的任何代码块中:

    jasmine.getEnv().beforeEach(() => {
      jasmine.addMatchers({
        toBeAwesome(util, customEqualityTesters) { ... }
      })
    });
    

    【讨论】:

    • 该问题承认这是可能的(“当前 API 允许将匹配器添加到描述块”)并声明它不足以解决问题(“我希望能够在任何地方使用我的匹配器,而不是一次又一次地添加它们”)。
    • 此代码不需要在描述块中。它可以在任何地方,如果您愿意,甚至可以放在全局范围内,只要它在您的测试之前运行即可。它本质上是创建一个不依赖于单个描述的全局beforeEach。所以,从技术上讲,是的,这些匹配器仍在为每个描述块添加,但为了您自己的代码,您只需要指定一次。
    • 这个全局 beforeEach 听起来很老套,但我想,它会做我想做的事。我先尝试了另一种解决方案,它确实有效,所以我会坚持下去。
    • 这是一个比add-matcher lib 更好的答案。 add-matcher 很棒,但不允许您像使用为 Jasmine 编写的匹配器那样自定义失败消息。你也可以用beforeAll代替beforeEach,应该会好一点。
    • 这应该写入什么文件? (记住所有测试都有随机运行顺序)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多