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

如何使用Mocha,Chai和Sinon检查函数被调用的参数数量?

Mocha、Chai和Sinon是一些常用的JavaScript测试工具库,它们可以帮助开发者进行单元测试和行为驱动开发(BDD)。

要检查函数被调用的参数数量,可以结合使用Mocha、Chai和Sinon的功能。

首先,确保已经安装了这些库。可以通过npm(Node Package Manager)来安装它们:

代码语言:txt
复制
npm install mocha chai sinon

接下来,创建一个测试文件,例如test.js,并在其中引入所需的库:

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

然后,编写一个测试用例,使用Sinon的spy函数来创建一个被监视的函数,并使用Chai的expect断言来验证函数的参数数量:

代码语言:txt
复制
describe('MyFunction', function() {
  it('should be called with 3 arguments', function() {
    const myFunction = sinon.spy();

    myFunction(1, 2, 3);

    expect(myFunction.calledWithExactly(sinon.match.number, sinon.match.number, sinon.match.number)).to.be.true;
  });
});

在上面的示例中,我们创建了一个名为MyFunction的测试套件,并在其中编写了一个测试用例。在测试用例中,我们使用sinon.spy()创建了一个被监视的函数myFunction,然后调用该函数并传入了3个参数。最后,我们使用expect断言来验证myFunction被调用时参数的数量是否为3。

这样,当运行Mocha来执行测试时,如果myFunction被调用时参数数量不为3,测试将会失败。

关于Mocha、Chai和Sinon的更多详细用法和功能,请参考以下链接:

  • Mocha: https://mochajs.org/
  • Chai: https://www.chaijs.com/
  • Sinon: https://sinonjs.org/
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

单元测试初体验

断言库 Chai Chai 是一个针对 Node.js 浏览器行为驱动测试测试驱动测试断言库,可与任何 JavaScript 测试框架集成。...['mocha', 'sinon-chai', 'source-map-support'], // Type: Array。...对于数组字符串,它检查 length 属性,对于对象,它检查可枚举属性数量 expect([]).to.be.empty expect('').to.be.empty expect({}).to.be.empty...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视函数进行 wrap 包装,因此可以通过它清楚知道,该函数调用过几次,传入什么参数返回什么结果,甚至是抛出异常情况。...它拥有 spy 提供所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,当使用 spy 时,原函数还会继续执行,但使用 stub 时就不会。

1.6K20

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

命令添加参数,指定使用babel进行编译: mocha --require @babel/register 如果觉得命令行参数太多太长,mocha允许我们使用配置文件方式来进行传参: module.exports...chai断言库 mocha可以搭配你喜欢任何断言库,经常使用chai断言库。 chai提供了多种风格语法去帮助我们判断函数执行结果。...sinon库提供了三种功能:spies、stubmock。 spies spies功能顾名思义就是间谍函数,它能帮助我们去收集监听函数有关调用信息。...spies作为sinon最简单功能,它不会对监听函数执行过程造成任何影响,stubmock功能都是基于spies实现。...调用了 exampleFunction 后,我们可以通过检查 getTime 方法 calledOnce 属性来判断 getTime 有没有成功调用

4K20
  • Vue 测试速成班

    Mocha 提供了 describe it 两个方法。describe 函数表示围绕测试单元组织测试用例:测试单元可以是类、函数、组件等。...Mocha 没有内置断言库,所以我们必须使用 Chai :它可以设置对结果期望。Chai 有许多不同内置断言,但没有涵盖所有用例,缺失断言可以通过 Chai 插件系统导入。...第一个参数表示调用哪个 action;第二个参数作为参数传递给 action。我们可以随时通过 state 属性检查当前状态。...当使用组件 store 时,我们必须将局部 Vue 实例 store 实例传递给 mount 函数。...Mocha 可以检测并等待异步函数完成。在函数内部,我们等待 onModify 方法完成,然后断言伪 commit 方法是否调用并传入了 post 调用返回参数。 10.

    2.7K10

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

    官网:mochajs.org github: github.com/mochajs/moc… chai.js chai 主要提供了断言函数assert,用来断言和比较测试结果代码执行结果。...test": "mocha test/**/*.js" } 复制代码 在test中建立一个js文件,在文件中引入这些工具,为了连接sinon chai,要使用sinon-chai const chai...,第一个参数是范围名字,第二个是一个回调函数,其中可以放单元测试代码 it()里写单元测试代码,第一个参数还是这个测试名字,第二个回调函数中放入单元测试代码 assert 就是断言代码执行后结果是什么...,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinoncalled方法判断函数是否被执行。...mocha,chai,sinon一些高级用法,还需要通过实践去学习。 另,本文只是对但纯js测试,react,vue小程序都有他们自己ui测试方案。

    2.5K20

    为ES6配置JavaScript测试工具

    以下示例使用了MocahChai,但原理同样适用于Jasmine。 基础 基本情况测试非ES6代码时一样。...最佳实践 接下来让我们看一看一些针对ES6最佳实践以及你可能会遇到陷阱。 在Mocha中谨慎使用箭头函数Mocha中请谨慎使用箭头函数。...避免在Sinon使用箭头函数Mocha类似,在Sinon.js中使用箭头函数也可能导致问题。 问题出在sinon.test上。...当你测试中存在测试替身(test double)时使用它是个好主意,因为它会在测试结束时自动帮你释放替身对象。但是由于它使用了this绑定,因此它无法在使用箭头函数时正常工作。...解决方案是要么在使用sinon.test时避免使用箭头函数,要么通过beforeEachafterEach来手工初始化释放测试替身: var sandbox; beforeEach(() => {

    2.9K20

    React 测试驱动教程

    Hello World Image 设置 MochaChaiSinon Enzyme Mocha:将用于运行我们测试。 Chai:是我们期待库。...AirBnB 写一个很漂亮测试库。 安装这些包: npm i mocha chai sinon --save-dev 如果我们希望能够使用 ES6 编写测试,那么我们需要在运行前对代码进行转译。...Enzyme 现在我们所需“普通”测试工具都已经设置好了(mochachaisinon),接着让我们安装 Enzyme,并且开始测试 React component!...接下来让我们测试一个组件安装调用函数,当它安装时,我们可以得到一些暴露在 sinon信息正在使用 spies。...我们可以假装 Root 组件有一个子组件叫 CommentList,在安装后将调用任意回调。当通过给定 props 组件安装时,函数调用,因此我们就可以测试这个场景。

    4.6K20

    前端自动化测试工具 overview

    前端测试化工具简单汇总和比较 Qunit jquery出自动化测试库,没什么好说,可以想象其跟jquery UI及jquery animation等库结局一样,逃脱不了各种后来库全方位比较“...mocha: 优点: 终端显示友好 灵活,扩展性好 缺点: 自身集成度不高(没有断言,spy,异步等),而且经常要配合ChaiSinon等库使用 配置相对麻烦一点点 Jasmine: 优点:...两者功能覆盖范围粗略可以表示为: Jasmine(2.x) === Mocha + Chai + Sinon - mockserver PS: 个人实际使用后觉得ChaiSinon毕竟是专门做特定功能框架...,用 Mocha + Chai + Sinon 这种方式会想对舒爽一点。.../ http://thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html http://blog.founddrama.net/2012

    2.3K110

    前端自动化测试工具 overview

    前端测试化工具简单汇总和比较 Qunit jquery出自动化测试库,没什么好说,可以想象其跟jquery UI及jquery animation等库结局一样,逃脱不了各种后来库全方位比较“...mocha: 优点: 终端显示友好 灵活,扩展性好 缺点: 自身集成度不高(没有断言,spy,异步等),而且经常要配合ChaiSinon等库使用 配置相对麻烦一点点 Jasmine: 优点:...两者功能覆盖范围粗略可以表示为: Jasmine(2.x) === Mocha + Chai + Sinon - mockserver PS: 个人实际使用后觉得ChaiSinon毕竟是专门做特定功能框架...,用 Mocha + Chai + Sinon 这种方式会想对舒爽一点。.../ http://thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html http://blog.founddrama.net/2012

    1.4K10

    提高代码质量——使用JestSinon给已有的代码添加单元测试

    现在,我们可以使用单元测试来提高自己代码质量。下面,我将自己在使用JestSinon.js配置编写单元测试中收获经验踩到坑进行总结,根据从零开始配置编写单元测试这一条线来进行分享。...而对于其他测试框架如:Mocha或者Chai等,没有进行具体了解,因此在这里不多做评价。 如何配置Jest与Sinon.js,从而编写单元测试?...编写单元测试 在本章中,我们会针对如何编写单元测试文件进行一个具体讲解,其中包含: 同步函数测试 异步函数测试 HTTP测试 同时,我们会对当中使用JestSinon.jsAPI会进行简单介绍...('hjava'); // 判断了callback函数第一次调用第一个参数为'hjava' }); 从上面的示例中我们可以看到,针对同步函数,我们可以通过很简单单元测试模型来验证它功能。...附录 Jest Sinon.js ava ava关于配置解决webpack aliasissue Mocha Chai

    3.8K00

    Vue自动化测试

    单元测试 代码单元测试主要针对某些核心功能某些函数进行测试。vue官方推荐是使用karma,mochachai等。karma并不是一个测试框架,也不是一个断言库。...Karma兼容Jasmine,MochaQUnit,可以集成mocha,webpack等功能,成为以Karma为平台单元测试,官方选择mocha测试框架chai断言库。...it是对它需要完成某些功能描述,它里面是具体测试用例。在测试框架中,describe,it, expectsinon都是全局方法。...它其实即是将组件实例化过程进行封装,帮你模拟它组件实例化过程。shallow这个函数把组件List实例化,并传入props等参数,这样,你可以断言数据绑定结果。...单元测试问题 项目往往都是使用vuexvue-router进行异步获取数据,需要外部依赖。

    1.9K50

    前端单元测试总结_javascript单元测试

    通过编写测试用例,可以做到一次编写,多次运行 解释性:测试用例用于测试接口、模块重要性,那么在测试用例中就会涉及如何使用这些API。...其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰 驱动开发,指导设计:代码测试前提是代码本身可测试性,那么要保证代码可测试性,就需要在开发中注意API设计...development(BDD)风格测试框架,在业内较为流行,功能很全面,自带asssert、mock功能 mocha: node社区大神tj作品,可以在nodebrowser端使用,具有很强灵活性...sinon.js: 目前使用最多mock库,将其分为spies、stub、fake XMLHttpRequest、Fake server、Fake time几种,根据不同场景进行选择。...,越靠近现实越好 充分考虑数据边界条件 对重点、复杂、核心代码,重点测试 利用AOP(beforeEach、afterEach),减少测试代码数量,避免无用功能 测试、功能开发相结合,有利于设计代码重构

    1.5K20

    也来扯扯 Vue 单元测试

    受不了每次调整之后,得不断地检查代码,甚至查看页面源码是否符合预期。不断修改各种参数并刷新以测试不同情况下结果。而这里面的一大部分工作其实可以让单元测试来完成。所以说,懒人让世界更美好!...但目前总体来说已趋于稳定,推荐使用,需要留意其最新更改。 选择一个好用断言库 通常是 chai,有时候结合 sinon 一起使用chai 是一个优秀库,里面的方法十分完善。.../stubs/mocks 工具(sinon 以及 sinon-chai 插件),一个用于测试浏览器环境(可以是 Chrome 浏览器,也可以用 PhantomJS)。...而在之前,我需要学习好几个插件用法,至少得知道 mocha 用处原理吧 我得学会 karma 配置命令,chai 各种断言方法……,经常得周旋于不同文档站之间,其实是件很烦也很低效事。...Chrome headless 对于 PhantomJS 来说算是一个致命打击,特别是 Chrome 官方推出 puppeteer 在短时间内已经广泛接受使用

    1.8K30

    web自动化测试(1):再谈UI发展史与UI、功能自动化测试

    自动化测试分层 单元自动化测试(数据处理层): 单元测试(unit testing):是指对软件中最小可测试单元进行检查验证。 单元含义:单元就是人为规定最小测功能模块。...),mock功能 Mocha: 框架不带断言和mock功能,需要结合其他工具,像chai。...由tj大神开发 Jest: 由Facebook出品测试框架,在Jasmine测试框架上演变开发而来,集成了 Mocha,chai,jsdom,sinon等功能。...主要检查验证模块间调用返回以及不同系统、服务间数据交换,常见接口测试工具有postman、jmeter、loadrunner等; 这里我是强烈推荐Rap,一款开源免费接口自动化、MOCK数据自动生成...(5)—— 基于Karma+Mocha+Chai单元测试接口测试 https://blog.51cto.com/13869008/2175983 转载本站文章《web自动化测试(1):再谈UI发展史与

    1.7K20

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

    2、Sinon 这是一个独立库,用于在JavaScript测试中创建测试替身(侦查、桩模拟)。它通过提供工具来验证函数调用、控制行为等,帮助你编写隔离测试。...在这个文件中,你可以定义Stryker应该如何运行你测试创建变异。...(mockObject.method1()); // 输出: 'hello' TestDouble.js 还提供了许多其他用于创建和管理测试替身功能,例如验证函数是否调用,替换模块等。...你可以在集成测试中使用这个库,作为你测试套件一部分来拦截真实请求,或者你可以使用它来构建自定义HTTP代理,捕获、检查/或以任何你喜欢方式重写HTTP。你可以点击这里查看这个库。...; }); }); 这些示例使用MochaChaiSuperagent,但并非必须使用这些:Mockttp可以与任何可以处理promise测试工具配合使用,可以模拟来自任何库、工具或设备请求

    30120

    【Web技术】264- Web Component可以取代你前端框架吗?

    元素构造函数connectCallback区别是,当时一个元素创建时(好比document.createElement)将会调用构造函数,而当一个元素已经插入到DOM中时会调用connectedCallback...另一个有用生命周期方法是attributeChangedCallback,每当将属性添加到observedAttributes数组中时,就会调用这个函数。这个方法调用时两个参数分别为旧值新值。...作为一种性能优化,只有在这列举出属性才会监测它们改变。无论这个attribute什么时候改变了,都会调用attributeChangedCallback,参数分别是当前值值。...这需要以下index.html能够在浏览器中运行测试。除了Mocha,这个设置还加载了WebcomponentsJS polyfill,Chai用于断言,以及Sinon用于监听模拟。 <!...然后加载测试文件,并调用mocha.run()运行测试。 请注意,在使用ES6模块化时,还需要将mocha.run()放在type="module"script中。

    2.6K30

    用不了多久 Web Component,就能取代你前端框架吗?

    元素构造函数connectCallback区别是,当时一个元素创建时(好比document.createElement)将会调用构造函数,而当一个元素已经插入到DOM中时会调用connectedCallback...另一个有用生命周期方法是attributeChangedCallback,每当将属性添加到observedAttributes数组中时,就会调用这个函数。这个方法调用时两个参数分别为旧值新值。...作为一种性能优化,只有在这列举出属性才会监测它们改变。无论这个attribute什么时候改变了,都会调用attributeChangedCallback,参数分别是当前值值。...这需要以下index.html能够在浏览器中运行测试。除了Mocha,这个设置还加载了WebcomponentsJS polyfill,Chai用于断言,以及Sinon用于监听模拟。 <!...然后加载测试文件,并调用mocha.run()运行测试。 请注意,在使用ES6模块化时,还需要将mocha.run()放在type=”module”script中。

    2.2K40

    JavaScript单元测试利器Jest+mocha+chai

    chai 是一个针对 Node.js 浏览器行为驱动测试测试驱动测试断言库,可与任何 JavaScript 测试框架集成。istanbul是一个 JavaScript 代码覆盖率检查库。...3:使用instanceof检测数据类型。4:使用new()方法构造出对象是引用型。变量作用域生命周期:全局变量(分为函数外定义变量和在函数内定义无var声明变量)可以在任何位置调用。...局部变量(分为在函数使用var声明变量函数参数变量)只能在当前函数体内调用。JavaScript变量生命周期: 在它声明时初始化。局部变量在函数执行完毕后销毁。...String:单引号双引号不能交叉使用使用.length属性访问字符串长度;字符串一旦创建,其值不能改变,若想改变必须销毁原有字符串。...关键词 function 必须是小写,并且必须以与函数名称相同大小写来调用函数。2.6JavaScript中数组数组对象是使用单独变量名来存储一系列值。

    58320

    Meteor开发指南 — Mantra核心组件

    本文介绍了Mantra核心组件和它们如何共同发挥作用。 关注客户端 Mantra非常关注客户端,因为那是你写大部分代码地方。我们允许客户端缓存连接器与服务端远端数据层交互。...ES2015 语法 ES2015 模块 我们依赖于ES2015多个特性和它模块系统。为了使用Mantra,你首先需要使用Meteor 1.3,它包含了一个ES2015模块系统实现。...React 作为 UI 我们使用React作为MantraUI(表现层)。你应当使用props来传递所有的数据,事件处理函数。...它做了下面这些事情: 将states传递给UI组件 将actions传递给UI组件 在应用上下文中传入任何配置项函数 应用上下文 应用上下文能所有actions容器获取,所以这里是app中提供共享变量地方...测试 测试是Mantra核心。Mantra帮助你测试应用每个部分。我们强调规则会帮助你编写测试。你可以使用熟悉工具,如Mocha, ChaiSinon来进行测试。

    1K60
    领券