Node JS Jasmine使用jasmine.any()测试多个类型

时间:2015-10-07 10:44:45

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

我使用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

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

1 个答案:

答案 0 :(得分: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();