1

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

我熟悉间谍和间谍的.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()which几乎可以处理任何事情,但undefined.

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

4

1 回答 1

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();
于 2015-10-07T11:19:45.637 回答