【问题标题】:Node JS Jasmine Testing multiple types with jasmine.any()Node JS Jasmine 使用 jasmine.any() 测试多种类型
【发布时间】:2023-03-05 14:13:02
【问题描述】:

我正在使用 Jasmine (v2.2.0) 进行测试,并且我试图监视一个方法,该方法预计将使用第一个参数的特定数据和第二个参数的未知类型调用。

我熟悉spies.toHaveBeenCalledWith() 间谍的语法,加上jasmine.any() 它可能看起来像这样:

expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any(String));

但我找不到处理几种类型的方法。 我正在寻找的是一种执行相同操作的方法,其中第二个参数是任何类型,同样,当第二个参数是某些类型之一时,例如:

// Any type is okay:
expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any());

// String or number only:
expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any(String OR Number));

不用说,前面的示例不是工作代码,它们正是我正在寻找的正确语法。

另一方面,我发现jasmine.anything() 可以处理几乎任何事情,但使用undefined 失败。

非常感谢任何形式的帮助。

【问题讨论】:

    标签: javascript node.js unit-testing jasmine spy


    【解决方案1】:

    我还没有找到仅使用 jasmine.any 的方法,但您可以使用自定义匹配器实现类似的效果:

    toBeStringOrNumber : function () {
      return {
        compare : function (actual, expected) {
          return {
            pass : (typeof actual == 'string' || typeof actual == 'number'),
            message : actual + ' is not a string or a number'
          };
        }
      };
    }
    

    然后在实参上调用:

    expect(my.spy).calls.argsFor(0)[1].toBeStringOrNumber();
    

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多