
5 分钟快速上手 sinon-chai安装配置与第一个 spy 断言的入门教程【免费下载链接】sinon-chaiExtends Chai with assertions for the Sinon.JS mocking framework.项目地址: https://gitcode.com/gh_mirrors/si/sinon-chaisinon-chai 是一个专为 JavaScript 单元测试设计的 Chai 插件它把 Sinon.JS 测试框架的 spy、stub、mock 断言能力无缝接入 Chai 断言库。简单来说完成 sinon-chai 安装配置后你就能用一句spy.should.have.been.calledWith(foo)写出自然流畅的测试断言彻底告别又长又绕的旧式写法。本教程面向零基础新手5 分钟带你完成 sinon-chai 安装、配置并写出第一个 spy 断言。sinon-chai 是什么它解决了什么痛点在单元测试中Sinon.JS 负责记录函数调用行为spy、stub、mockChai 负责断言结果。两者都很强大但配合起来却很别扭写法示例原生 Sinon 断言sinon.assert.calledWith(mySpy, foo)硬套 Chai 接口mySpy.calledWith(foo).should.be.oksinon-chai 断言mySpy.should.have.been.calledWith(foo)第三种写法是不是读起来就像一句英文这就是 sinon-chai 的价值用 Chai 的自然语法直接调用 Sinon 的全部 spy 能力可读性瞬间拉满。它的核心实现位于项目的 lib/sinon-chai.js 中本质是一个标准的 Chai 插件。快速安装 sinon-chai一条命令搞定sinon-chai 安装非常简单前提是你已经安装了 Chai 和 Sinon.JS它们作为 peerDependencies 存在。在你的项目目录下执行npm install --save-dev sinon-chai chai sinon 小贴士sinon-chai 支持 Chai 5/6 以及 Sinon 4 及以上版本建议在测试环境--save-dev安装避免打包进生产代码。sinon-chai 配置三行代码完成接入安装完成后配置同样只需一步把插件注册进 Chai。无论是 Node 环境还是 Mocha 测试都建议把这段代码放在测试入口文件或公共 fixture 中import * as chai from chai; import sinonChai from sinon-chai; chai.use(sinonChai);如果你偏好should风格再加一行chai.should();即可。从此所有 spy、stub、mock 对象都自动拥有了 Chai 风格的断言能力。第一个 spy 断言5 分钟写出可读的单元测试下面用最常见的场景演示测试一个函数是否用正确的参数调用了回调函数。这里以 Mocha 测试框架为例import * as chai from chai; import sinon from sinon; import sinonChai from sinon-chai; chai.should(); chai.use(sinonChai); function hello(name, cb) { cb(hello name); } describe(hello 函数, function () { it(应该用正确问候语调用回调, function () { var cb sinon.spy(); // 1. 创建 spy hello(foo, cb); // 2. 执行被测函数 cb.should.have.been.calledWith(hello foo); // 3. spy 断言 }); });三步走非常清晰创建 spy → 调用被测函数 → 用 sinon-chai 断言调用行为。这段测试运行后如果通过恭喜你已经掌握了 sinon-chai 最核心的用法常用断言速查表spy 断言一键查sinon-chai 几乎覆盖了 Sinon 的全部 spy 断言方法下面是最高频的几个should与expect语法等价断言场景sinon-chai 写法被调用过spy.should.have.been.called调用次数spy.should.have.callCount(n)恰好调用一次spy.should.have.been.calledOnce带参调用spy.should.have.been.calledWith(...args)参数完全匹配spy.should.have.been.calledWithExactly(...args)调用顺序spy1.should.have.been.calledBefore(spy2)有返回值spy.should.have.returned(val)抛出异常spy.should.have.thrown(TypeError)完整的断言清单和边界行为可以参考项目的 test/callArguments.js、test/callCount.js 等测试文件它们就是最好的活文档。should 与 expect两种接口随你选sinon-chai 同时支持 Chai 的should和expect两种接口风格偏好完全由你决定// should 风格 cb.should.have.been.calledWith(hello foo); // expect 风格 expect(cb).to.have.been.calledWith(hello foo);此外任何断言都可以用 Chai 的.not取反例如spy.should.have.not.been.called表示从未被调用用.always前缀可以断言每次调用都满足条件比如spy.should.always.have.been.calledWith(...)。这些细节让 sinon-chai 的表达能力非常完整而且它不只支持 spystub 和 mock 同样适用。常见问题与进阶建议断言报错not a spy请确认传入的对象确实来自sinon.spy()、sinon.stub()或sinon.mock()。想深入学习直接阅读项目源码 lib/sinon-chai.js 的插件注册逻辑或通过git clone https://gitcode.com/gh_mirrors/si/sinon-chai拉取仓库结合测试用例逐条验证断言行为。配合 TypeScript只要 Chai 与 Sinon 的类型声明正常sinon-chai 无需额外配置即可使用。总结sinon-chai 用极低的成本一条安装命令 一行注册代码大幅提升了 JavaScript 单元测试的可读性。本文从 sinon-chai 安装配置讲到第一个 spy 断言希望你已经在 5 分钟内跑通了首个测试。接下来试着把项目里手工判断 spy 是否被调用的旧代码替换成should.have.been.calledWith(...)这种自然的断言写法你会发现测试代码从此变得赏心悦目【免费下载链接】sinon-chaiExtends Chai with assertions for the Sinon.JS mocking framework.项目地址: https://gitcode.com/gh_mirrors/si/sinon-chai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考