理解Sinon.js的yield()、yields()和callsArg()

2024-04-18

有什么区别

  • stub.yield([arg1, arg2, ...])
  • spy.yields([arg1, arg2, ...])
  • stub.callsArg(index)

in the Sinon.js http://sinonjs.org/docs/#stubs存根库?

stub.yield()是我唯一能够掌握的:

  stub = sinon.stub(API, 'call_remote');
  callback = sinon.spy();
  API.call_remote('help', callback);
  @stub.yield( "solution!" );
  @stub.calledOnce.should.be.true;
  @callback.calledOnce.should.be.true;
  @callback.args[0][0].should.eql( "solution!" );

使用 should.js 进行测试时,所有断言都会通过。

是否有类似的测试模式stub.yields() and stub.callsArg(index)?

该文档没有提供任何示例来阐明其他两种方法,但我对它们很好奇。


我相信文档中概述的方法如下:

  • spy.yield
  • stub.yields
  • stub.callsArg

之间的主要区别yields and callsArg可以在 sinon 的收益率文档中找到:

如果一个方法接受多个回调,则需要使用callsArg让存根调用第一个回调之外的其他回调。

yields将调用first它遇到的函数参数与您提供给它的任何可选参数。callsArg将尝试调用函数参数给定索引在该通话中arguments对象,并且不向其传递任何参数(您可以使用callArgWith对于这种行为)。

spy.yield非常类似于stub.yields但它是间谍 API 的一部分,并且它调用传递给它的所有回调。

以下是一些展示差异的示例(如果示例有点做作,请原谅我):

Yields:

var fn = sinon.expectation.create().withArgs(1, 2);
var stub = sinon.stub().yields(1, 2);
stub(fn);
fn.verify();

调用参数:

var f1 = sinon.expectation.create().never();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().callsArg(1);
stub(f1, f2);
f1.verify();
f2.verify();

Yield:

var f1 = sinon.expectation.create().once();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().yield();
stub(f1, f2);
f1.verify();
f2.verify();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解Sinon.js的yield()、yields()和callsArg() 的相关文章

随机推荐

  • 具有重复参数(可变参数)的磁铁模式

    是否可以使用磁铁图案 http spray io blog 2012 12 13 the magnet pattern 与可变参数 object Values implicit def fromInt x Int Values implic
  • getattr/setattr/hasattr/delattr 线程安全吗?

    看这个单例实现 if not hasattr Singleton instance with Singleton instance lock if not hasattr Singleton instance Singleton insta
  • Maven 父项目自动化

    我有这个结构 child C 家长 A child B 如果我尝试在没有父级的情况下安装子级 B maven 会抛出一个错误 我知道按照惯例我应该将父级安装在我的存储库中 但是有没有办法让某人拉取子级并在安装过程中安装自动父辈 编辑 我要尽
  • 链接器如何处理跨翻译单元的相同模板实例化?

    假设我有两个翻译单元 foo cpp void foo auto v std vector
  • ant、jar 文件和类路径哦天哪

    我正在尝试重新构建我的构建技术来创建依赖于常见的第 3 方 jar 文件的 Java jar 文件 GlazedLists Apache Commons 等 我一直将它们全部放入 Java JRE dir lib ext 中 这样 JRE
  • React-testing-library 未从样式表渲染计算样式

    基本场景是这样的 我有一个组件width 100 正如样式表中所定义的 因此它应该保留其父组件的宽度 我想计算组件的宽度并将其应用到我的子组件 因为我通过渲染它createPortal我希望它们的宽度相同 这在浏览器中有效 然而 在我的测试
  • 在 WebAPI 中的模型上使用可序列化属性

    我有以下场景 我正在使用 WebAPI 并根据模型将 JSON 结果返回给消费者 我现在有额外的要求 将模型序列化为 base64 以便能够将它们保存在缓存中和 或将它们用于审计目的 问题是当我添加 Serializable 属性到模型 因
  • 检查 Linq-to-xml 中结果是否存在

    我正在使用 Linq to XML 进行简单的 此用户是否已注册 检查 此处没有安全性 只是为桌面应用程序创建注册用户列表 如何处理这样的查询结果 var people from person in currentDoc Descendan
  • 将图像添加到 RichText 元素

    我正在努力实现以下目标 为了实现这一点 我使用富文本 使用它我可以添加多个具有不同样式的文本 但我不知道如何将图像添加到此文本范围 也许还有其他一些因素 您不需要第三方库来实现此目的 在最新的稳定版本中 Flutter 引入了WidgetS
  • Python 解包格式字符串的参数列表

    我有一个根据用户输入动态创建的格式字符串 我正在列表中收集格式字符串的参数 我想知道如何在格式字符串的末尾解压它们 我看到了一些似乎与此相关的问题 但我对 Python 很陌生 我似乎无法将他们的解决方案应用于我的案例 我想做的事情的想法是
  • Bootstrap 4添加垂直分隔管

    您好 我正在尝试在导航链接之间添加一些分隔符 但它不起作用 我尝试添加 nav link after content 但它不起作用或显示在左侧 这是我的代码
  • Angular 6 ag-grid单元格渲染器点击功能

    所以我正在尝试设置 ag grid 但我无法让一件事发挥作用 我想要一个关于行动的专栏 然后我希望它有一个链接或按钮来触发组件文件中的方法 对于列 def 我有以下内容 我究竟做错了什么 headerName Actions cellRen
  • 如何使用(ruby)机架中间件组件设置 cookie?

    我正在为 Rails 应用程序编写一个机架中间件组件 该组件需要有条件地设置 cookie 我目前正在尝试设置cookies 从谷歌搜索看来这应该有效 class RackApp def initialize app app app end
  • 用于 PHP 开发的 Eclipse PDT 与 NetBeans [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于 PHP 开发 Eclipse PDT 与 NetBeans 相比如何 我刚刚买了一台装有 Windows 7 的新电脑 我开始设置
  • 当我读取本地文件时,Ajax 不工作

    好吧 我连续两天都无法解决这个问题 这个例子在这里 http www w3schools com ajax tryit asp filename tryajax xml2 http www w3schools com ajax tryit
  • 保护在 MacOS 上 Docker 中的 0.0.0.0 本地运行的 Flask/Celery 应用程序的本地主机端口

    我的应用程序有一个 Flask 后端和一个 Angular Electron 前端 该应用程序在 Mac Catalina 上本地运行 Flask Celery 和 Redis 位于单独的 docker 容器中 而前端位于 Docker 外
  • 如何使用IPAddress和IPv4Mask获取IP地址范围?

    我试图在 C NET 2 0 中完成以下任务 给定一个 IPAddress 对象 例如 192 168 127 100 和另一个包含 IPv4Mask 子网掩码的 IPAddress 对象 例如 255 255 248 0 我应该能够计算
  • numpy 赋值不起作用

    假设我有以下内容numpy array In x Out array 1 2 3 4 5 5 2 4 1 5 6 7 2 5 1 dtype int16 In y Out array 3 4 4 1 dtype int16 我想替换一个子数
  • scipy.stats.maxwell中的loc和scale参数是什么?

    The maxwell boltzmann distribution is given by from MathWorld A Wolfram Web Resource wolfram com http mathworld wolfram
  • 理解Sinon.js的yield()、yields()和callsArg()

    有什么区别 stub yield arg1 arg2 spy yields arg1 arg2 stub callsArg index in the Sinon js http sinonjs org docs stubs存根库 stub