@cypress/sinon-chai

中文文档
2.9.1发布于 2020/12/30(BSD-2-Clause OR WTFPL)CommonJS零依赖近 30 天下载 9587

Extends Chai with assertions for the Sinon.JS mocking framework, compatible with Cypress.io

原始使用文档
文档目录7 节
  1. Assertions
  2. Examples
  3. Installation and Usage
  4. Node
  5. AMD
  6. <script> tag
  7. Ruby on Rails

Sinon.JS Assertions for Chai

renovate-app badge semantic-release CircleCI

Sinon–Chai provides a set of custom assertions for using the Sinon.JS spy, stub, and mocking framework with the Chai assertion library. You get all the benefits of Chai with all the powerful tools of Sinon.JS.

Instead of using Sinon.JS's assertions:

sinon.assertCalledWith(mySpy, "foo");

or awkwardly trying to use Chai's should or expect interfaces on spy properties:

mySpy.calledWith("foo").should.be.ok;
expect(mySpy.calledWith("foo")).to.be.ok;

you can say

mySpy.should.have.been.calledWith("foo");
expect(mySpy).to.have.been.calledWith("foo");

Assertions

All of your favorite Sinon.JS assertions made their way into Sinon–Chai. We show the should syntax here; the expect equivalent is also available.

Sinon.JS property/method Sinon–Chai assertion
called spy.should.have.been.called
callCount spy.should.have.callCount(n)
calledOnce spy.should.have.been.calledOnce
calledTwice spy.should.have.been.calledTwice
calledThrice spy.should.have.been.calledThrice
calledBefore spy1.should.have.been.calledBefore(spy2)
calledAfter spy1.should.have.been.calledAfter(spy2)
calledImmediatelyBefore spy.should.have.been.calledImmediatelyBefore(spy2)
calledImmediatelyAfter spy.should.have.been.calledImmediatelyAfter(spy2)
calledWithNew spy.should.have.been.calledWithNew
alwaysCalledWithNew spy.should.always.have.been.calledWithNew
calledOn spy.should.have.been.calledOn(context)
alwaysCalledOn spy.should.always.have.been.calledOn(context)
calledWith spy.should.have.been.calledWith(...args)
alwaysCalledWith spy.should.always.have.been.calledWith(...args)
calledWithExactly spy.should.have.been.calledWithExactly(...args)
alwaysCalledWithExactly spy.should.always.have.been.calledWithExactly(...args)
calledWithMatch spy.should.have.been.calledWithMatch(...args)
alwaysCalledWithMatch spy.should.always.have.been.calledWithMatch(...args)
returned spy.should.have.returned(returnVal)
alwaysReturned spy.should.have.always.returned(returnVal)
threw spy.should.have.thrown(errorObjOrErrorTypeStringOrNothing)
alwaysThrew spy.should.have.always.thrown(errorObjOrErrorTypeStringOrNothing)

For more information on the behavior of each assertion, see the documentation for the corresponding spy methods. These of course work on not only spies, but individual spy calls, stubs, and mocks as well.

Note that you can negate any assertion with Chai's .not. E. g. for notCalled use spy.should.have.not.been.called.

For assert interface there is no need for this library. You can install Sinon.JS assertions right into Chai's assert object with expose:

var chai = require("chai");
var sinon = require("sinon");

sinon.assert.expose(chai.assert, { prefix: "" });

Examples

Using Chai's should:

"use strict";
var chai = require("chai");
var sinon = require("sinon");
var sinonChai = require("sinon-chai");
chai.should();
chai.use(sinonChai);

function hello(name, cb) {
    cb("hello " + name);
}

describe("hello", function () {
    it("should call callback with correct greeting", function () {
        var cb = sinon.spy();

        hello("foo", cb);

        cb.should.have.been.calledWith("hello foo");
    });
});

Using Chai's expect:

"use strict";
var chai = require("chai");
var sinon = require("sinon");
var sinonChai = require("sinon-chai");
var expect = chai.expect;
chai.use(sinonChai);

function hello(name, cb) {
    cb("hello " + name);
}

describe("hello", function () {
    it("should call callback with correct greeting", function () {
        var cb = sinon.spy();

        hello("foo", cb);

        expect(cb).to.have.been.calledWith("hello foo");
    });
});

Installation and Usage

Node

Do an npm install sinon-chai to get up and running. Then:

var chai = require("chai");
var sinonChai = require("sinon-chai");

chai.use(sinonChai);

You can of course put this code in a common test fixture file; for an example using Mocha, see the Sinon–Chai tests themselves.

AMD

Sinon–Chai supports being used as an AMD module, registering itself anonymously (just like Chai). So, assuming you have configured your loader to map the Chai and Sinon–Chai files to the respective module IDs "chai" and "sinon-chai", you can use them as follows:

define(function (require, exports, module) {
    var chai = require("chai");
    var sinonChai = require("sinon-chai");

    chai.use(sinonChai);
});

<script> tag

If you include Sinon–Chai directly with a <script> tag, after the one for Chai itself, then it will automatically plug in to Chai and be ready for use. Note that you'll want to get the latest browser build of Sinon.JS as well:

<script src="chai.js"></script>
<script src="sinon-chai.js"></script>
<script src="sinon.js"></script>

Ruby on Rails

Thanks to Cymen Vig, there's now a Ruby gem of Sinon–Chai that integrates it with the Rails asset pipeline!

版本与发布记录

@cypress/sinon-chai 共发布 6 个版本,首次发布于 2017/06/26;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.9.1latest2020/12/305 年前
2.9.02019/06/197 年前
0.0.0-development2019/06/187 年前
1.1.02017/08/129 年前
1.0.12017/07/209 年前
1.0.02017/06/269 年前

关于 @cypress/sinon-chai 的常见问题

@cypress/sinon-chai 是什么?

Extends Chai with assertions for the Sinon.JS mocking framework, compatible with Cypress.io

如何安装 @cypress/sinon-chai?

在项目目录运行 npm install @cypress/sinon-chai,或使用 pnpm add / yarn add / bun add。

@cypress/sinon-chai 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/cypress__sinon-chai 是否存在。

@cypress/sinon-chai 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@cypress/sinon-chai 可以商用吗?

@cypress/sinon-chai 使用 (BSD-2-Clause OR WTFPL) 许可。可在 BSD-2-Clause、WTFPL 中任选其一遵守。选择 BSD-2-Clause 时,宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cypress/sinon-chai 的下载量有多少?

根据 npm 官方下载统计,@cypress/sinon-chai 在 2026/10/11 – 2026/11/09 这 30 天内被下载 9,587 次,日均约 320 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cypress/sinon-chai 还在维护吗?

最新版本 2.9.1 发布于 2020/12/30(5 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2017/06/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。