首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用sinon截断yield*函数调用

sinon是一个JavaScript的测试工具库,用于创建可靠的测试环境和模拟对象。它提供了一组功能强大的工具,可以截断和模拟函数的调用,包括yield*函数。

yield函数是ES6引入的一种特殊的生成器函数语法,用于在生成器函数内部委托执行另一个生成器函数。在某些情况下,我们可能希望在测试中截断yield函数的调用,以便控制生成器函数的执行流程。

使用sinon截断yield*函数调用的方法如下:

  1. 首先,确保已经安装了sinon库,并在测试文件中引入它。
  2. 创建一个sinon的stub对象,用于模拟yield*函数的调用。可以使用sinon.stub()方法创建stub对象。
  3. 使用stub对象的returns方法指定yield函数调用返回的值。例如,可以使用stub.returns(value)来指定yield函数调用返回的值为value。
  4. 在测试中,将生成器函数中的yield函数调用替换为stub对象。可以使用ES6的解构赋值语法将生成器函数中的yield函数调用替换为stub对象,例如:{ yield*: stub }。

下面是一个示例代码,演示如何使用sinon截断yield*函数调用:

代码语言:txt
复制
const sinon = require('sinon');

function* generatorFunction() {
  yield* anotherGeneratorFunction();
}

function* anotherGeneratorFunction() {
  yield 'Hello';
  yield 'World';
}

// 创建sinon的stub对象
const stub = sinon.stub().returns('Mocked Value');

// 替换yield*函数调用为stub对象
const { yield*: stub } = generatorFunction();

// 遍历生成器函数的结果
for (const value of generatorFunction()) {
  console.log(value);
}

// 输出结果:
// Mocked Value
// Mocked Value

在上面的示例中,我们使用sinon创建了一个stub对象,并将其返回值设置为'Mocked Value'。然后,我们将生成器函数中的yield函数调用替换为stub对象。最后,我们遍历生成器函数的结果,发现所有的yield函数调用都被截断,并返回了'Mocked Value'。

需要注意的是,sinon是一个用于JavaScript的测试工具库,它并不是腾讯云的产品。因此,在这个特定的问题中,无法提供与腾讯云相关的产品和产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

怎么super调用超类构造函数

任何时候一个子类需要引用它直接的超类,它可以关键字super来实现。super有两种通用形式。第一种调用超类的构造函数。第二种用来访问被子类的成员隐藏的超类成员。...使用super调用超类构造函数 子类可以调用超类中定义的构造函数方法,super的下面形式:java复制代码super(parameter-list); 这里,parameter-list定义了超类中构造函数所用到的所有参数...这使Box( )构造函数调用w、h和d来初始化width, height, 和 depth。BoxWeight不再自己初始化这些值。它只需初始化它自己的特殊值:weight。...上面的例子,调用super( )用了三个参数。既然构造函数可以被重载,可以超类定义的任何形式调用super( ),执行的构造函数将是与所传参数相匹配的那一个。...例如,下面是BoxWeight一个完整的实现,BoxWeight具有以不同方法构造盒子的构造函数。在每种情况下,适当的参数调用super( )。

12110

【Web技术】639- Web前端单元测试到底要怎么写?

export function* onGetBizTableData() { /* 先获取 api 调用需要的参数:关键字、分页信息等 */ const {keywords} = yield...api */ const result = yield call(api.getBizTableData, payload); /* 正常返回 */ yield...这个测试用例的步骤就是利用生成器函数一步步的产生下一个 effect ,然后断言比较。 从上面的注释 3、4 可以看到, redux-saga 还提供了一些辅助函数来方便的处理分支断点。...前面讲过调用后台请求是的 fetch ,我封装了两个方法来简化调用和结果处理:getJSON() 、 postJSON() ,分别对应 GET 、POST 请求。...('/api/biz/get-table', payload)).toBe(true); }); }); 由于 api 层直接调用了工具库,所以这里 sinon.stub() 来替换工具库达到测试目的

3.1K30
  • 提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

    Jest与Sinon.js是什么 Jest是FaceBook推出的一个针对JavaScript进行单元测试的库,它提供了断言、函数模拟等API来对你自己编写的业务逻辑代码进行测试后。...编写单元测试 在本章中,我们会针对如何编写单元测试文件进行一个具体的讲解,其中包含: 同步函数测试 异步函数测试 HTTP测试 同时,我们会对当中使用到的Jest和Sinon.js的API会进行简单介绍...是一个注册的全局变量 handleUserData(callback); expect(callback.mock.calls.length).toBe(1); // 判断callback函数调用了一次...expect(callback.mock.calls[0][0]).toBe('hjava'); // 判断了callback函数的第一次被调用的第一个参数为'hjava' }); 从上面的示例中我们可以看到...('user', () => { userFunc((data) => { expect(data).toEqual({username: 'hjava'}); // 对象比较beEqual

    3.8K00

    单元测试初体验

    要是的预处理器的映射。预处理器可以通过插件加载。...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视的函数进行 wrap 包装,因此可以通过它清楚的知道,该函数调用过几次,传入什么参数返回什么结果,甚至是抛出的异常情况。...在运行时 stub 替换真正代码,忽略调用代码的原有实现。目的是一个简单一点的行为替换一个复杂的行为,从而独立地测试代码的某一部分。...它拥有 spy 提供的所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。...如果你曾经听过“mock 对象”这种说法,这其实是一码事 —— Sinon 的 mock 可以用来替换整个对象以改变其行为,就像函数 stub 一样。

    1.6K20

    使用mocha编写node服务单元测试

    ,我们可以给这个函数传入一个done方法,等到异步返回后再去显示地调用done方法,告诉mocha该测试用例执行完毕。...例如当我们需要对一个删除数据的接口进行测试时,我们不能真的去执行数据库删除操作来判断函数是否正常执行。这时候就需要引入sinon来帮助我们替换掉这些难以模拟的逻辑。...sinon库提供了三种功能:spies、stub和mock。 spies spies功能顾名思义就是间谍函数,它能帮助我们去收集被监听函数的有关调用信息。...spies作为sinon最简单的功能,它不会对被监听函数的执行过程造成任何影响,stub和mock功能都是基于spies实现的。...我们也可以让替换函数主动抛出错误,来测试调用它的函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,

    3.9K20

    Vue 测试速成班

    首先是准备工作,导入函数、实例化对象并设置其参数,让目标对象(这里是一个函数)进入一个可测试的状态。然后操作该功能/方法。最后我们对函数返回的结果进行断言。...import chai from 'chai'; import sinon from 'sinon'; import sinonChai from 'sinon-chai'; chai.use(sinonChai...); it('should set info coming from endpoint', async () => { const commit = sinon.stub(); sinon.stub...如果我们返回一个 Promise,测试函数将变成异步的。Mocha 可以检测并等待异步函数完成。...在函数内部,我们等待 onModify 方法完成,然后断言伪 commit 方法是否被调用并传入了 post 调用返回的参数。 10. 浏览器 从代码的角度来看,我们已经测试到了应用程序的各个方面。

    2.7K10

    精准测分:基于函数调用关系链的例消振算法 ( 上帝视角 )

    三、函数的宇宙社会学法则导致的例关联函数问题剖析。 在函数调用关系链的作用下,一个函数或主动或被动的与其他函数产生调用关系。...这种调用关系的存在,造成了例与函数两者在关联的时候,总会出现一系列问题: 1、从函数角度而言,越是基础的公共函数,她被调用的次数就越多,她与其他函数的互相交叉关系就越复杂。...但是由于函数调用关系链的影响,例会被动的关联很多跟他的功能描述不相关的函数。若是这个例操作步骤很复杂,那么其所调用函数将呈现爆炸式的递增。如何能够将用例关联的函数控制在核心业务函数范围内呢?...当我们完成了函数每一个分支用例设计的时候,若是突然有一个无关的例也调用了这个函数,我们如何拒绝将这个函数与这个例进行关联呢?...五、深度视角:函数调用关系链亲密度值解决例关联不相关函数的问题。

    1.5K00

    为ES6配置JavaScript测试工具

    即使是你使用了一个调用了Babel的库,这也是适用的。把配置选项写入.babelrc文件意味着你不必在多处维护这些信息了。...在Mocha中谨慎使用箭头函数 在Mocha中请谨慎使用箭头函数。在某些情况下你需要使用this.timeout来控制一个测试在超时之前的等待时间。如果你使用了箭头函数,那这个配置就不会生效。...避免在Sinon中使用箭头函数 与Mocha类似,在Sinon.js中使用箭头函数也可能导致问题。 问题出在sinon.test上。...解决方案是要么在使用sinon.test时避免使用箭头函数,要么通过beforeEach和afterEach来手工初始化和释放测试替身: var sandbox; beforeEach(() => {...co 然后使用它包裹你的测试代码就可以了: it('should do something with generators', co.wrap(function*() { var result = yield

    2.9K20

    React 测试驱动教程

    如果你没有全局安装 webpack(npm i webpack -g),你也可以 node modules 方式进行启动: ....对我们来说是一种组件调用 render 方法,得到我们可以断言的 React 元素,而无需实际安装组件到 DOM 上。更多的 React 元素请看这。...接下来让我们测试一个组件的安装和调用函数,当它安装时,我们可以得到一些暴露在 sinon 上的信息和正在使用的 spies。...我们可以假装 Root 组件有一个子组件叫 CommentList,在安装后将调用任意的回调。当通过给定 props 组件安装时,函数调用,因此我们就可以测试这个场景。...(这是 Karma 的一件很酷的事) 在配置 karma 之前先安装 yargs,它能让你使用命令行参数来定制 Karma 的配置。

    4.6K20

    jest 单元测试改善老旧的 Backbone.js 项目

    /fakeAppFacade'; import Model from "models/CardBinding"; sinon 拦截异步请求 搞定了异步请求的地址,自然要拦截真正的请求; // backbone.js...sinon 就可以很好的胜任这种暗度陈仓的工作: it('should fetch from server', function(){ //模拟的返回数据 const server = sinon.createFakeServer...另一个难点在于,Backbone.View 的 constructor / initialize “构造函数”中,并不能接受自定义的 props 参数。...$el.find('.multi').length).toEqual(0); }); 对方法调用的测试 自然还是 sinon 来做: it('应正确响应事件回调并加载子模板', function()...,可以快速迁移到 jest 中 Backbone.View 视图组件在经过 ES6 升级和合理封装后,可以明显改善页面的整洁度,并顺利应用于单元测试 可以 sinon.createFakeServer

    3.5K10

    对 React 组件进行单元测试

    ', function() { ... }); ... }); spy 正如 spy 字面的意思一样,我们这种“间谍”来“监视”函数调用情况 通过对监视的函数进行包装,可以通过它清楚的知道该函数调用过几次...对于一些组件和共有函数等,完善的测试也是一种最好的使用说明书。...(function coverage):是否每个函数调用了 行覆盖率(line coverage):是否每一行都执行了 测试结果根据覆盖率被分为“绿色、黄色、红色”三种,应该视具体情况尽量提高相应模块的测试覆盖率...React 单元测试常见案例 例的预处理或后处理 可以beforeEach和afterEach做一些统一的预置和善后工作,在每个例的之前和之后都会自动调用: describe('test components...; }); ... }); 调用组件的“私有”方法 对于一些组件中,如果希望在测试阶段调用到其一些内部方法,又不想对原组件改动过大的,可以instance()取得组件类实例

    4.3K40

    更可靠的 React 组件:提纯

    一旦对相同的输入返回不同的输出了,一个函数就变成 非纯(impure) 的了。这种情况可能发生在函数依赖了全局状态的时候。...,两次的调用返回值也是不同的。就是因为非纯函数依赖了全局状态: 变量 said。 sayOnce() 的函数体中的 said = true 语句修改了全局状态。这产生了副作用,这是非纯的另一个特征。...因此可以说,纯函数没有副作用,也不依赖全局状态。 其单一数据源就是参数。所以纯函数是可以预测并可判断的,从而可重用并可以直接测试。 React 组件应该从纯函数特性中受益。...与此同时, defaultProps({...}) 包装过的组件会在 siteName 属性缺失时将其设置为 globalConfig.siteName。正是这一步,非纯组件被分离和孤立出来。...就更简单了: import assert from 'assert'; import { shallow, mount } from 'enzyme'; import { spy } from 'sinon

    1.1K10

    装饰器、魔法方法和元类机制自动记录 Python 函数和方法调用日志

    一个不错的解决方案是利用自动化机制记录关键函数和方法的调用记录。今天我们来看几种自动记录 Python 函数和方法调用日志的实现手段。...我们可以利用 Python 的装饰器记录函数和方法调用的参数和返回值。...我们可以type函数简单的定义一个类出来。...使用元类自动记录方法调用日志 下面我们元类机制实现自动记录类方法调用日志的机制。...真实生产环境中,对于复杂函数和方法的执行,只有调用日志可能还不够,需要手动记录一些关键行为。当然只要把复杂的函数和方法拆分的足够细致,子函数和子方法的调用日志就可以补充足够的细节了。

    1K20

    分享7个专业级的JavaScript测试库,提高你的工作效率

    2、Sinon 这是一个独立的库,用于在JavaScript测试中创建测试替身(侦查、桩和模拟)。它通过提供工具来验证函数调用、控制行为等,帮助你编写隔离的测试。...4、Cucumber Cucumber是一个运行简单语言编写的自动化测试的工具。因为它们是简单语言编写的,所以你的团队中的任何人都可以阅读。...步骤定义是JavaScript编写的函数,这些函数会被Cucumber用来执行功能文件中的每一步。...(); // 使模拟函数调用时返回特定的值 td.when(mockFunction('hello')).thenReturn('world'); // 现在,当你调用 mockFunction(...(mockObject.method1()); // 输出: 'hello' TestDouble.js 还提供了许多其他用于创建和管理测试替身的功能,例如验证函数是否被调用,替换模块等。

    28120

    深入 Python 文件操作从基础到高级技术

    文件打开技术打开文件的基本语法在Python中,使用open()函数来打开文件。open()函数接受文件名和打开模式作为参数,返回一个文件对象。...使用with语句,无需手动调用close()方法,系统会在离开with块时自动关闭文件。...在文件操作中,open()函数返回的文件对象本身就是一个上下文管理器,但也可以使用contextlib模块的contextmanager装饰器自定义上下文管理器。...yield语句之前的代码为__enter__方法,之后的代码为__exit__方法。文件读写二进制数据在处理二进制文件时,需要以二进制模式('rb'或'wb')打开文件。...文件定位与截断在文件处理过程中,有时我们需要在文件中定位到特定位置进行读取或写入操作。此外,文件截断是一种在指定位置截断文件内容的操作。让我们一起深入了解这两个方面的技术。

    11020
    领券