当前位置: 首页 > 知识库问答 >
问题:

如何将自定义匹配器从Jasmine 1迁移到Jasmine 2

师博
2023-03-14

不幸的是,JavaScript测试框架jasmine的第2版引入了一些突破性的更改。其中一个更改是处理自定义匹配器的方式,如下所述:

http://jasmine.github.io/2.0/upgrading.html

addMatchers函数不再在规范中(此处),它现在位于全局jasmine对象上。

 /* was:
     this.addMatchers({
  */
  jasmine.addMatchers({

matcher的设置现在有点不同了。工厂接收一个util对象,该对象包含jasmines相等函数和任何注册的CustomEqualityTester。工厂应返回一个带有比较函数的对象,该函数将使用实际值和预期值直接调用,而不是使用此函数上的实际值

   /* was:
       toBeCustom: function(expected) {
         var passed = this.actual == expected;
    */
    toBeCustom: function(util, customEqualityTesters) {
      return {
        compare: function(actual, expected) {
          var passed = actual == expected

比较现在应该返回一个具有pass和message属性的对象。

我正在寻找一种简单的方法来迁移我们现有的匹配器,以便我们可以轻松地切换到新的茉莉版本。

共有2个答案

严朝明
2023-03-14

加载匹配器库允许您编写与Jasmine v1、Jasmine v2和Jest兼容的匹配器。

邵捷
2023-03-14

为了简化到新jasmine版本的转换,下面的特殊迁移对象将有所帮助。

不是在this对象上添加匹配器,而是在jasmineMigrate对象上添加它们。但这是你真正需要做的。jasmineMigrate对象将处理其余部分。

 /* was:
     this.addMatchers({
  */
  jasmineMigrate .addMatchers({

迁移对象的实现:

var jasmineMigrate = {};

jasmineMigrate.addMatchers = function (matchers) {

    Object.keys(matchers).forEach(function (matcherName) {
        var matcher = matchers[matcherName], 
            migratedMatcher = {};

        migratedMatcher[matcherName] = function (util, customEqualityTesters) {
            return {
                compare: function (actual) {
                    var matcherArguments,
                        thisForMigratedMatcher,
                        matcherResult,
                        passed;

                    //In Jasmine 2 the first parameter of the compare function 
                    //is the actual value.
                    //Whereas with Jasmine 1 the actual value was a property of the matchers this
                    //Therefore modify the given arguments array and remove actual
                    matcherArguments = [].slice.call(arguments)
                    matcherArguments.splice(0, 1);

                    //Add actual to the this object we'll be passing to the matcher
                    thisForMigratedMatcher = {
                        actual: actual
                    };

                    //Now call the original matcher aufgerufen, with the modified
                    //arguments and thisForMigratedMatcher which will be applied to
                    //the matcher
                    passed = matcher.apply(thisForMigratedMatcher, matcherArguments);

                    matcherResult = {
                        pass: passed,
                        message: thisForMigratedMatcher.message
                    };
                    return matcherResult;
                }
            }
        };

        jasmine.addMatchers(migratedMatcher);
    });
}
 类似资料:
  • 我升级为不和谐。JSV12,但它破坏了我现有的v11代码。下面是一些导致错误的示例: 如何将代码迁移到Discord。JSV12并修复这些错误?在哪里可以看到v12引入的突破性更改?

  • 问题内容: 我很了解Java。哪些警告和资源将帮助我尽可能轻松地跨过另一端(C#)。 问题答案: 最大提示:请使用go一词中的.NET命名约定。这样,您将不断被提示使用的是哪种语言。(听起来很愚蠢,但这确实有帮助。)尽可能多地接受该语言的习惯用法。 有许多专门针对您所处地区的人们的书籍-在亚马逊上搜索“ C#for Java”,您将获得很多成功。值得 仔细 阅读以确保您不认为C#和Java中的功能

  • 从升级到时,我收到以下错误,尽管SQL脚本没有改变: Spring Boot建议 为确保架构升级顺利进行,请按照以下说明操作: > < li> 首先将您的1.5.x Spring Boot应用程序升级到Flyway 4(撰写本文时为4.2.0),请参见Maven和Gradle的说明。 将架构升级到 Flyway 4 后,升级到Spring启动 2 并再次运行迁移以将应用程序移植到 Flyway 5

  • 我工作的应用程序,一直使用到现在,我想迁移到。我是使用的新手,参考了,但对于某些部分,我不清楚我的中的配置应该如何。 当前文件如下所示:

  • 我试图使用JUnit/Hamcrest断言集合至少包含一个自定义逻辑断言为true的元素。我希望有像“anyOf”这样的匹配器,它采用lambda(或匿名类定义),在这里我可以定义自定义逻辑。我试过TypeSafeMatcher,但不知道该怎么处理它。 我不认为任何一个是我想要的,因为这似乎需要一个匹配者的名单。

  • 迁移包括以下部分: MIP 核心库迁移 将站点引用的 mip.js 和 mip.css 版本由 1.0 修改为 2.0。MIP 核心库 2.0 版本完全兼容 1.0 版本,开发者可放心升级。具体做法如下: mip.js 文件迁移 将站点中的所有如下引用: <script src="https://c.mipcdn.com/static/v1/mip.js"></script> 改为: <scrip