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

如何使用sinon来存根非对象函数

Sinon是一个JavaScript的测试工具库,用于创建测试替身(test doubles),包括存根(stubs)、间谍(spies)和模拟(mocks)。存根(stubs)是Sinon中的一种测试替身,用于替代非对象函数。

使用Sinon来存根非对象函数的步骤如下:

  1. 安装Sinon:首先,你需要在你的项目中安装Sinon。你可以通过npm或者yarn来安装Sinon,具体命令如下:
代码语言:txt
复制
npm install sinon

或者

代码语言:txt
复制
yarn add sinon
  1. 导入Sinon:在你的测试文件中,导入Sinon库,以便在测试中使用Sinon的功能。你可以使用以下代码导入Sinon:
代码语言:txt
复制
const sinon = require('sinon');
  1. 创建存根(stub):使用Sinon的stub函数来创建一个存根。存根可以替代非对象函数,并且可以模拟函数的行为。你可以使用以下代码创建一个存根:
代码语言:txt
复制
const stub = sinon.stub();
  1. 配置存根的行为:你可以使用Sinon的API来配置存根的行为。例如,你可以使用returns方法来指定存根在被调用时返回的值。你可以使用以下代码配置存根的行为:
代码语言:txt
复制
stub.returns('Stubbed value');
  1. 使用存根:将存根应用于你的测试场景中。你可以调用存根,就像调用原始函数一样。例如,你可以使用以下代码调用存根:
代码语言:txt
复制
console.log(stub()); // 输出 'Stubbed value'

通过上述步骤,你可以使用Sinon来存根非对象函数。Sinon的存根功能可以帮助你在测试中模拟函数的行为,以便更好地控制测试环境。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云的部分相关产品,还有其他云计算服务商提供的类似产品可供选择。

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

相关·内容

Moment.js 如何使用 Epoch Time 构造对象

如果你对 Epoch 不是非常了解的话,请参考下下面的帖子: UNIX时间:新纪元时间(Epoch Time) Moment.js 是可以直接使用数字构造 Moment 对象的。...那么在构造 Moment 对象的时候使用的方法是不同的。 对一个数字,我们应该使用: moment(1635795000000) 直接构造就可以了。...对第二个数字,应该使用的方法是,moment.unix(1635795000) 从输出中,我们可以看出来,如果使用了 .unix 的方法的话,会自动在你的输入数据之后添加 3 个 0。...总结 Moment 对象内部使用的是毫秒级别的保存,因此在构造的时候如果使用的是数字构造对象。 你需要考虑使用的方法,否则可能会出现不正确的情况。

2.3K60

如何使用Faster R-CNN计算对象个数

为了我们的概念验证工作,我将使用“Faster R-CNN”的Keras实现来处理视频文件,并使用给定类的检测对象对图像进行注释。...多年来,我们已经从使用标准的RCNN网络,通过Fast R-CNN,到Faster R-CNN,解决我们简单的计算问题。...当对象检测被执行的时候, 使用著名的VGG16,一个标准的R-CNN的训练过程:GPU需要花费两天半的时间完成5000张的图像,并且需要几百GB的存储空间。...在测试时检测对象使用一个GPU花费47s处理出一张图片。这主要是由于在没有共享计算的情况下,对每个对象提议进行了卷积网络的正向传递。...Fast R-CNN通过引入一种单阶段训练算法改进R-CNN,该算法将对象和它们的空间位置在一个处理阶段进行分类。

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

    现在,我们可以使用单元测试提高自己的代码质量。下面,我将自己在使用Jest和Sinon.js配置和编写单元测试中的收获的经验和踩到的坑进行总结,根据从零开始配置和编写单元测试这一条线进行分享。...; 在我的项目中,主要是使用Sinon.js模拟HTTP请求。...在Sinon.js的文档中,有专门关于XMLHttpRequest对象的模拟的章节,在下一章中,我们将会针对项目中sinon.js的使用进行简单的介绍。...编写单元测试 在本章中,我们会针对如何编写单元测试文件进行一个具体的讲解,其中包含: 同步函数测试 异步函数测试 HTTP测试 同时,我们会对当中使用到的Jest和Sinon.js的API会进行简单介绍...在本章中,我们总结了如下问题进行介绍,希望大家再遇到相同问题时能够快速解决: 如何统计Jest单元测试覆盖率 如何设置单元测试文件不使用本地的babel配置 如何设置单元测试文件使用本地的babel配置

    3.8K00

    如何使用 javascript 面向对象编程唬住面试官(part 2)

    使用new创建 这样就完成了原型模式的使用了,能够将函数进行共享,不用每次都重复创建不同的函数实例了,而且所有的属性共享,也能够很方便节省代码和简化结构。...为什么能够通过原型模式解决问题呢?...在 javascript 里面,创建一个新函数对象),都会在创建过程里面增加一个prototype属性,也就是原型属性,这个属性指向函数的原型对象,例如food1 指向Food 而这个被指向的原型对象里面也会自动获得一个...,不能通过对象实例重写原型中的值③ 对象实例可以重写从原型对象中“继承”过来的同名属性,这时候会切断对象实例和原型对象的某个同名属性的联系,如果想恢复联系即恢复没改过的同名属性的话,可以使用delete...会通过组合使用构造函数模式和原型模式或者动态原型模式解决,下回分解。

    72220

    单元测试初体验

    expect 和 should是 BDD 风格的,二者使用相同的链式语言组织断言,但不同在于他们初始化断言的方式:expect 使用构造函数来创建断言对象实例,而 should 通过为 Object.prototype...sinon.js 中 spy 主要用来监视函数的调用情况,sinon 对待监视的函数进行 wrap 包装,因此可以通过它清楚的知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出的异常情况。...var spy = sinon.spy(orginObj, 'launch'); spy.restore(); 当 spy 使用完成后,切记把它恢复成原始函数,就像上边例子中最后一步那样。...它拥有 spy 提供的所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数的调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。...如果你曾经听过“mock 对象”这种说法,这其实是一码事 —— Sinon 的 mock 可以用来替换整个对象以改变其行为,就像函数 stub 一样。

    1.6K20

    分享一个关于this对象的编程小技巧,如何使用箭头函数避免this对象混淆?

    为什么使用箭头可以呢? 四 因为在箭头函数中,this对象与封闭词法环境中的this保持一致。换一句话,箭头函数中的this,是定义与执行它的函数中this对象。...在全局作用域下指代“当前”对象 this是当前代码上下文执行环境中的一个属性,是一个在运行时确定身份,同时又不能在编码时指定的一个动态对象。...一般我们都是在一个函数或方法中使用this,这个时候this指代什么,本质上取决于当前函数是由谁调用的。...在全局作用域下this指代全局对象 如果函数是全局函数,是在全局使用域中调用的,那么this等于全局对象。这个全局对象,在浏览器宿主环境中指window对象。...六 最后总结一下,虽然bind等方法可以改变方法的调用者对象,借此改变this对象。但在大多数情况下,我们使用不捆绑this的箭头函数避免this对象的混淆问题,是最简单省事的方法。

    1.1K30

    如何模拟一个XMLHttpRequest请求用于单元测试——nise源码阅读与分析

    目前,有许许多多的测试框架都提供了模拟HTTP请求相关的一些流程功能,我们在这边文章中将会讲到的,就是我们在上一篇关于单元测试的博客提高代码质量——使用Jest和Sinon给已有的代码添加单元测试中提到的...它是Sinon.js的一部分,用来处理HTTP相关测试问题。 该库提供了替换原生的XHR对象和Server相关的接口,但是我们在本文中只介绍关于XHR部分,也就是浏览器中的XHR对象的替换。...: FakeXMLHttpRequest, // XHR对象构造函数 useFakeXMLHttpRequest: useFakeXMLHttpRequest //调用后,使用fake XHR对象替换全局...,并返回一个带有restore方法的fake XHR对象构造函数 }; 我们在使用时,只需调用userFakeXMLHttpRequest方法,即可将原生的XHR对象替换成nise提供的XHR对象。...,辅助测试 通过上面的源码介绍我们可以知道:nise是通过完全模拟一个模拟的XHR对象,然后再使用这个模拟的XHR对象替换全局的XHR对象

    2.5K10

    前端测试驱动开发模式(TDD)快速入门

    主要用来mock一些东西,比如可以用sinon mock一个假的函数sinon也可以返回这个函数执行与否。...test": "mocha test/**/*.js" } 复制代码 在test中建立一个js文件,在文件的中引入这些工具,为了连接sinon 和 chai,要使用sinon-chai const chai...如何写多个单元测试代码: 直接在describe中加入多个it函数即可: describe('测试navigateTo方法',()=>{ it(`new router 后存在navigateTo...(badFn, 'this.commonDirectFn is not a function') // 再把包装后的函数传入throws }) 复制代码 使用sinon模拟函数 如果需要模拟一个函数...,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinon的called方法判断函数是否被执行。

    2.5K20

    Vue 测试速成班

    首先是准备工作,导入函数、实例化对象并设置其参数,让目标对象(这里是一个函数)进入一个可测试的状态。然后操作该功能/方法。最后我们对函数返回的结果进行断言。...describe 函数表示围绕测试单元组织测试用例:测试单元可以是类、函数、组件等。Mocha 没有内置的断言库,所以我们必须使用 Chai :它可以设置对结果的期望。...Footer); wrapper.vm.modify(); expect(wrapper.vm.info).to.eql('Modified by click'); }); 上面的例子展示了如何使用组件实例实现交互...我们可以使用 vm 属性访问组件实例,还可以通过组件实例访问到组件 method 中的方法和 data 对象(状态)里的属性。...在运行时更改实现称为 mocking,我们将使用 Sinon[7] 这一 mocking 框架实现。

    2.7K10

    为ES6配置JavaScript测试工具

    以下的示例使用了Mocah和Chai,但原理同样适用于Jasmine。 基础 基本情况和测试ES6代码时一样。...在Mocha中谨慎使用箭头函数 在Mocha中请谨慎使用箭头函数。在某些情况下你需要使用this.timeout控制一个测试在超时之前的等待时间。如果你使用了箭头函数,那这个配置就不会生效。...避免在Sinon使用箭头函数 与Mocha类似,在Sinon.js中使用箭头函数也可能导致问题。 问题出在sinon.test上。...当你的测试中存在测试替身(test double)时使用它是个好主意,因为它会在测试结束时自动帮你释放被替身的对象。但是由于它使用了this绑定,因此它无法在使用箭头函数时正常工作。...解决方案是要么在使用sinon.test时避免使用箭头函数,要么通过beforeEach和afterEach手工初始化和释放测试替身: var sandbox; beforeEach(() => {

    2.9K20

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

    可以看到上述代码定义了一个describe组测试getResult函数的功能,里面有两个测试用例分别测试了入参正常和非法入参的情况。 而测试用例中如何来判断函数是否正常执行呢?...例如当我们需要对一个删除数据的接口进行测试时,我们不能真的去执行数据库删除操作判断函数是否正常执行。这时候就需要引入sinon帮助我们替换掉这些难以模拟的逻辑。...sinon库提供了三种功能:spies、stub和mock。 spies spies功能顾名思义就是间谍函数,它能帮助我们去收集被监听函数的有关调用信息。...我们常常使用替换掉测试困难的代码部分,例如数据库操作、网络请求等。...我们也可以让替换函数主动抛出错误,测试调用它的函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,

    3.9K20

    iOS_单元测试三之OCMock使用

    2.5.2、对象参数 2.6、模拟block参数 Invoking block arguments 2.7、抛出异常 Throwing exceptions 2.8、发出通知 Posting notifications...MOPerson *aPerson = [[MOPerson alloc] init]; id partialMockPerson = OCMPartialMock(aPerson); 调用一个函数:已经存根的就触发存根的...real object / class 当使用部分模拟实例和模拟类方法时,可以将存根方法转发给真实对象或类。...Ignoring non-object arguments stub方法,可以响应对象参数的调用(可以响应参数没有通过的调用:无论是对象参数 or 对象参数) OCMStub([partialMockPerson...但是,可以从多个线程使用模拟对象。模拟对象甚至可以在不同的线程中使用,而其设置在主线程中继续进行。 11、补充 11.1、单例的mock 不能直接mock单例的,会引起mock冲突。

    3.2K20

    React 测试驱动教程

    设置 Webpack 本教程不是一个教如何使用 webpack,所以我不会详细说,但重要的是要了解基本的东西。 Webpack 就像 Rails 中的 Assets Pipeline 一样。...接下来让我们测试一个组件的安装和调用函数,当它安装时,我们可以得到一些暴露在 sinon 上的信息和正在使用的 spies。...当通过给定 props 组件安装时,函数被调用,因此我们就可以测试这个场景。在组件渲染时给评论列表一些 style,然后我们就可以知道 shallow render 是如何处理这些样式的了。...接下来让我们添加一些 shallow rendered 测试,当给定一个 isActive 的 props 时,确保我们的组件使用了适当的 CSS class。...在下一次的文章中,我将花更多的时间在特殊场景的测试,还有如何测试 Redux,我更喜欢 flux 的实现。 虽然我只使用 React 开发了数月,但我已经爱上它了。

    4.6K20

    .NET单元测试的艺术-2.核心技术

    但是,如果我们要测试的方法依赖于一个外部资源,如文件系统、数据库、Web服务或者其他难以控制的东西,那又该如何编写测试呢?为了解决这些问题,我们需要创建测试存根、伪对象及模拟对象。...刚刚我们想到了依赖注入,依赖注入的主要表现形式就是构造函数注入与属性注入,于是这里我们主要来看看构造函数层次与属性层次如何注入一个伪对象。   ① 通过构造函数注入伪对象 ?   ...我们可以在测试代码中使用存根替换Web Service模拟异常,然后模拟邮件服务检查调用。测试的内容是LogAnalyzer与其他对象的交互。 ?...三、隔离(模拟)框架 3.1 为何使用隔离框架   对于复杂的交互场景,可能手工编写模拟对象存根就会变得很不方便,因此,我们可以借助隔离框架帮我们在运行时自动生成存根和模拟对象。...3.4 使用NSubstitute模拟值   如果接口的方法返回不为空,如何从实现接口的动态伪对象返回一个值呢?

    1.7K20

    COM 原理与应用学习笔记

    包容和聚合 包容 对象 B 包容对象 A,对象 B 使用包容方式提供接口 InterfaceA,则对象 B 需要实现 InterfaceA,只不过在实现里只是将调用全部转发给了对象 A 的对应函数。...按照通常使用方式实现的 IUnknown 为委托 IUnknown,而委托 IUnknown 在不同的情况下有不同的行为:当对象被正常使用时,委托 IUnknown 把调用传递给对象委托 IUnknown...;当对象被聚合使用时,委托 IUnknown 把调用传递到外部对象的 IUnknown 接口,即对象被创建时传递进来的 pUnknownOuter 参数,并且,这时外部对象通过委托 IUnknown...代理对象用列集手段处理成员函数的参数,通过列集处理后得到一个数据包(数据流),然后通过一种跨进程的数据传输方法,比如共享内存方法,甚至是网络协议等,当数据包传输到对象进程后,存根代码用散集(列集的反过程...)的方法把数据包参数解译出来,再用这些参数去调用组件对象;当组件对象成员函数返回后,存根代码又把返回值和输出参数列集成新的数据包,并把数据包传到客户进程中,代理对象接收到数据包后,把数据包解译出来再返回给客户函数

    1K20

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

    actions 业务里面我使用了 redux-actions 产生 action,这里用工具栏做示例,先看一段业务代码: import { createAction } from 'redux-actions...{deep: true} ); }, // ... }, defaultState ); 这里的状态对象使用了...selectors selector 的作用是获取对应业务的状态,这里使用了 reselect 做缓存,防止 state 未改变的情况下重新计算,先看一下表格的 selector 代码: import...saga 是一种 es6 的生成器函数 - Generator ,我们利用他产生各种声明式的 effects ,由 redux-saga 引擎消化处理,推动业务进行。...其实就是字面量对象! 我们可以用在业务代码同样的方式产生这些字面量对象,对于字面量对象的断言就非常简单了,并且没有直接调用 api 层,就用不着做 mock 咯!

    3K30

    15 个常见的 Node.js 面试问题及答案

    所有 EventEmitter 类都可以使用 eventEmitter.on() 函数将事件侦听器附加到事件。然后一旦捕捉到这样的事件,就会同步地逐个调用它的侦听器。...单线程的 Node.js 必须是非阻塞的,以防止线程阻塞在需要很长时间才能完成的任务上,事件循环负责实现这种阻塞行为,它使用应用程序线程调度挂起的任务。...如何处理 Node.js 中未捕获的异常? 我们可以在进程级别捕获应用程序中未捕获的异常。...例如,如果正在测试的组件在预期测试的部分之前有一个文件读取操作,则可以使用 stub 模拟该行为并返回模拟内容,而不用实际读取文件。...在 Node.js 中,我们使用Sinon 这样的库实现(译者注,Sinon 在测试中替换某部分代码,减少测试项编写的复杂度 https://sinonjs.org)。 14.

    1.8K20

    写给精明Java开发者的测试技巧

    Mock(模拟)对象提供了存根对象的所有功能,而且它还提供了预编程的期望结果。这就是说模拟对象和真实对象非常接近,它可以根据之前设定的状态执行不同的行为。...有时,我们会使用Test Double(测试替身)一词表示如上所述的任何类型的对象,我们在测试中会和这些对象进行交互。 通常来说,spy提供了最少的功能,因为它的目的就在于捕捉方法是否被调用。...Stub是下一个级别的测试替身,它通过设置预定义的方法调用返回值的方式,设定测试系统的执行流程。一个特定的存根对象通常可以在很多测试中使用。...通常,在一个测试集中的许多单元测试可能都非常类似,唯一的微小区别就在于如何针对测试准备测试系统。因此,对于软件开发人员来说,将这些重复的代码从单元测试重构到帮助函数中是很自然的。...如果一个单元测试调用了其它几个方法,并且在使用局部变量,那么单元测试的流程就变得不直观,并且你也不能够像之前那样容易理解单元测试的基本流程。

    2.1K10

    对 React 组件进行单元测试

    ', function() { ... }); ... }); spy 正如 spy 字面的意思一样,我们用这种“间谍”“监视”函数的调用情况 通过对监视的函数进行包装,可以通过它清楚的知道该函数被调用过几次...有时候会使用stub嵌入或者直接替换掉一些代码,达到隔离的目的 一个stub可以使用最少的依赖方法模拟该单元测试。...() { return 'bar'; });myObj.prop(); // 'bar' mock mock一般指在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象创建以便测试的测试方法...虽然 Jest 本身也有一些实现 spy 等的手段,但 sinon 使用起来更加方便。 III....对于一些组件和共有函数等,完善的测试也是一种最好的使用说明书。

    4.3K40
    领券