首页
学习
活动
专区
工具
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、stub和mock。 spies spies功能顾名思义就是间谍函数,它能帮助我们去收集被监听函数的有关调用信息。...spies作为sinon最简单的功能,它不会对被监听函数的执行过程造成任何影响,stub和mock功能都是基于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(),并且课已通过这个sinon的called方法判断函数是否被执行。...mocha,chai,sinon的一些高级的用法,还需要通过实践去学习。 另,本文只是对但纯js的测试,react,vue和小程序都有他们自己的ui测试的方案。

    2.5K20

    为ES6配置JavaScript测试工具

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

    3K20

    React 测试驱动教程

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

    4.6K20

    前端自动化测试工具 overview

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

    1.4K10

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

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

    3.8K00

    Vue的自动化测试

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

    1.9K50

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

    通过编写测试用例,可以做到一次编写,多次运行 解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。...其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰 驱动开发,指导设计:代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性,就需要在开发中注意API的设计...development(BDD)风格的测试框架,在业内较为流行,功能很全面,自带asssert、mock功能 mocha: node社区大神tj的作品,可以在node和browser端使用,具有很强的灵活性...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。你可以点击这里查看这个库。...; }); }); 这些示例使用了Mocha,Chai和Superagent,但并非必须使用这些:Mockttp可以与任何可以处理promise的测试工具配合使用,可以模拟来自任何库、工具或设备的请求

    35720

    用不了多久 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.3K40

    【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

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

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

    62820

    Meteor开发指南 — Mantra核心组件

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

    1K60
    领券