我有一个我正在存根的函数,它被调用多个参数。我只想检查第一个参数。其余的都是回调函数,所以我想把它们放在一边。因此,我可能有以下2个调用,以ajax为例:
method.get = sinon.stub();
method.get(25,function(){/* success callback */},function(){/* error callback */});
method.get(10,function(){/* success callback */},function(){/* error callback */});
我不能使用< code>method.get.calls...因为它不会区分第一个< code>get(25)和第二个< code>get(10)。但是如果我使用< code>method.get.withArgs(25)。打电话...那么它也不匹配,因为< code>withArgs()匹配所有参数,而this不匹配(而且永远也不可能,使用那样的回调)。
如何让sinon存根仅根据第一个参数检查和设置响应?
如果您只想检查第一个参数,则可以使用
method.get.withArgs(25).calledOnce
或者
method.get.calledWith(25)
withArgs
可用于匹配部分但不是所有参数。
具体来说, 方法 25 将
只检查第一个参数。
这是不正确的:
withArgs()
匹配所有参数
当调用带有Args的时,它会记住它在此处作为
matchingArguments
传递的参数。
然后当调用
存根
时,它会在此处获取所有匹配的假货。
调用
matchingFakes
时不带第二个参数,因此它返回所有fake,这些fake具有matchingArguments
,这些fakes与传递给
matching arguments
索引0开始,直到。这意味着即使有额外的参数,当false的
matchingArguments
匹配传递的参数的开头时,false也会匹配。
然后,所有匹配的fake都按matchingArguments排序。长度
和匹配最多参数的参数是被调用的参数。
以下测试确认了此行为,并通过了7年前的sinon
version1.1.0
、提出此问题时的版本1.14.0
和当前版本6.3.5
:
import * as sinon from 'sinon';
test('withArgs', () => {
const stub = sinon.stub();
stub.withArgs(25).returns('first arg is 25!');
stub.returns('default response');
expect(stub(25)).toBe('first arg is 25!'); // SUCCESS
expect(stub(25, function () { }, function () { })).toBe('first arg is 25!'); // SUCCESS
expect(stub(10, function () { }, function () { })).toBe('default response'); // SUCCESS
});
https://sinonjs.org/releases/latest/matchers/#sinonmatchany
您可以使用正统:
method.get.withArgs(25, sinon.match.any, sinon.match.any);
问题内容: 我有一个简单的问题。我曾尝试在许多博客中搜索有关此问题的信息,但所有站点都返回了如何快速运行功能,但我需要这种情况。 我的自定义函数是: 如何通过args将args传递给其他系统函数? 谢谢前进。 问题答案: 与(Objective-)C中类似,您不能将变量参数列表直接传递给另一个函数。您必须创建一个 (与C语言中的Swift等效)并调用一个带有参数的函数。 所以这可能是您要寻找的:
我试图发出一个静音命令,我正在添加一个系统,在这个系统中,你可以出于某种原因将它们静音。机器人将回复“(用户用户名)已禁用。原因:(原因)”。对我来说,args[0]只是提到了要禁用的用户,但我不知道如何获取args[0]之后的所有内容。我试过做类似于。但这显然不起作用-我有点猜测-我转向清单4这样的参数。 但显然,这不是很有效——有人知道如何获取args[0]之后的所有参数吗?
我有一个切入点,我试图用LTW。我有两个方法,我试图建议,每一个与不同的参数列表。但是,它们都有一个我想要的共同参数。 以下是我想建议的方法签名: 我本来希望参数与execution()方法相关联,但有时会出现“混淆”,给我的是IP而不是用户名。 是我不正确地使用了AspectJ,还是这是LTW中的一个bug?我运行的是AspectJ 1.6.13
问题内容: 首先, 我需要使用正则表达式来匹配或或(仅是国家编号)。我需要的用户能够输入一个并没有什么之后。似乎无法正确解决。 我发现所有正则表达式都匹配 所有 十进制数字,即 像这个正则表达式 问题是,我需要一个正则表达式,因此输入只能是带/不带小数点的数字。 但是要抓住的是它也需要匹配 因此,用户可以在文本字段中输入小数。所以基本上我需要用正则表达式来匹配 到目前为止,我的模式就是上面的模式。
问题内容: 首先, 我需要使用正则表达式来匹配或或(仅是国家编号)。我需要的用户能够输入一个并没有什么之后。似乎无法正确解决。 我发现所有正则表达式都匹配 所有 十进制数字,即 像这个正则表达式 问题是,我需要一个正则表达式,因此输入只能是带/不带小数点的数字。 但是要抓住的是它也需要匹配 因此,用户可以在文本字段中输入小数。所以基本上我需要用正则表达式来匹配 到目前为止,我的模式就是上面的模式。
问题内容: 我想匹配所有URL,但从与该正则表达式匹配的beeing中排除图像URL:jpe?g | gif | png。 \ b(?:https?| ftp | file):// [-A-Z0-9 +&@#/%?=〜 | $!:,。;] * A-Z0-9 +&@# /%=〜 | $ 问题是带有排除项的部分不能像这样工作:(?!jpe?g | gif | png) 有人对此有解决方案吗? 例: 不