我使用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
。
非常感谢任何形式的帮助。
答案 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();