chai-spies-next

这是一个 Chai Spies 的分支,用于将最新代码发布到 NPM 模块的 master 分支。Chai Spies 的开发已经减少,并阻碍了长久以来在问题上发布的优秀功能。

差异

最近,chai-spies 通过删除 reset 方法引入了回归。此模块通过保留方法并使其可供使用来恢复该回归。

Chai Spies

这是 chai 断言库的附加插件。它提供了最基本的函数间谍功能和测试。虽然对小型模块很有用,但您可能需要更强大的东西。查看 jack,了解用于 chai 的功能齐全的模拟/存根/间谍断言库。

该库主要旨在为任何有兴趣开发 chai 插件的人提供起点。如果您正在开发模块,欢迎使用它作为起点。我还鼓励使用编译工具,以允许模块在 node.js 和浏览器中同时工作。

安装

Node.js

Chai Spies 在 npm 上可用。

  $ npm install chai-spies

浏览器

在包含 chai.js 后包含 chai-spies.js

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

插件

如果您在浏览器中使用 chai-spies,则无需执行任何操作。它将检测全局命名空间中的 chai 并自动使用。

如果您使用的是节点,这里有一个有用的片段。

var chai = require('chai')
  , spies = require('chai-spies');

chai.use(spies);

var should = chai.should()
  , expect = chai.expect;

为浏览器构建

如果您正在开发 chai 的附加组件,您可能会发现 support 文件夹的内容很有用。它直接包含将目录中的所有 js 文件打包以供浏览器使用所需的一切。如果没有任何外部依赖项,所有内容都将使用 folio(一个小型 JS 打包工具)打包并使用 CommonJS require 风格的加载器进行包装。请参阅 support/compile.js 中的注释。

Chai Spies API 参考

创建间谍

在此模块中,间谍要么是空函数,要么是包装的命名函数。一旦 chai 扩展完成,您就可以通过 chai 自身的接口创建间谍。

function original () {
  // do something cool
}

var spy = chai.spy(original);

// then use in place of original
ee.on('some event', spy);

// or use without original
var spy_again = chai.spy();
ee.on('some other event', spy_again);

// or you can track an object's method
var array = [ 1, 2, 3 ];
chai.spy.on(array, 'push');

// or you can track multiple object's methods
chai.spy.on(array, 'push', 'pop');

array.push(5);

// and you can reset the object calls
array.push.reset();

// or you can create spy object
var object = chai.spy.object([ 'push', 'pop' ]);
object.push(5);

// or you create spy which returns static value
var spy = chai.spy.returns(true);

spy(); // true

断言

.spy

断言对象是一个间谍。

expect(spy).to.be.spy;
spy.should.be.spy;

.called

断言间谍已被调用。否定通过。

expect(spy).to.have.been.called();
spy.should.have.been.called();

请注意,called 可以用作可链接的方法。

.with

断言间谍至少被调用了一次,即使提供了更多参数,也包含给定参数。

spy('foo');
expect(spy).to.have.been.called.with('foo');
spy.should.have.been.called.with('foo');

对于 spy('foo', 'bar')spy(); spy('foo') 也将通过。

如果使用多个参数,断言间谍至少被调用了一次,并且包含所有给定参数。

spy('foo', 'bar', 1);
expect(spy).to.have.been.called.with('bar', 'foo');
spy.should.have.been.called.with('bar', 'foo');

.with.exactly

类似于 .with,但仅在参数列表与提供的参数列表完全相同的情况下才会通过。

spy();
spy('foo', 'bar');
expect(spy).to.have.been.called.with.exactly('foo', 'bar');
spy.should.have.been.called.with.exactly('foo', 'bar');

对于 spy('foo')spy('bar')spy('bar'); spy('foo')spy('foo'); spy('bar')spy('bar', 'foo')spy('foo', 'bar', 1) 不会通过。

也可以用于具有单个参数的调用。

.always.with

断言每次调用间谍时,参数列表都包含给定参数。

spy('foo');
spy('foo', 'bar');
spy(1, 2, 'foo');
expect(spy).to.have.been.called.always.with('foo');
spy.should.have.been.called.always.with('foo');

.always.with.exactly

断言间谍从未被调用过与提供的参数列表不同的参数列表。

spy('foo');
spy('foo');
expect(spy).to.have.been.called.always.with.exactly('foo');
spy.should.have.been.called.always.with.exactly('foo');

.once

断言间谍恰好被调用了一次。

expect(spy).to.have.been.called.once;
expect(spy).to.not.have.been.called.once;
spy.should.have.been.called.once;
spy.should.not.have.been.called.once;

.twice

断言间谍恰好被调用了两次。

expect(spy).to.have.been.called.twice;
expect(spy).to.not.have.been.called.twice;
spy.should.have.been.called.twice;
spy.should.not.have.been.called.twice;

.exactly(n)

断言间谍恰好被调用了 n 次。

expect(spy).to.have.been.called.exactly(3);
expect(spy).to.not.have.been.called.exactly(3);
spy.should.have.been.called.exactly(3);
spy.should.not.have.been.called.exactly(3);

.min(n) / .at.least(n)

断言间谍至少被调用了 n 次。

expect(spy).to.have.been.called.min(3);
expect(spy).to.not.have.been.called.at.least(3);
spy.should.have.been.called.at.least(3);
spy.should.not.have.been.called.min(3);

.max(n) / .at.most(n)

断言间谍最多被调用了 n 次。

expect(spy).to.have.been.called.max(3);
expect(spy).to.not.have.been.called.at.most(3);
spy.should.have.been.called.at.most(3);
spy.should.not.have.been.called.max(3);

.above(n) / .gt(n)

断言间谍被调用次数超过 n 次。

expect(spy).to.have.been.called.above(3);
expect(spy).to.not.have.been.called.gt(3);
spy.should.have.been.called.gt(3);
spy.should.not.have.been.called.above(3);

.below(n) / .lt(n)

断言间谍被调用次数少于 n 次。

expect(spy).to.have.been.called.below(3);
expect(spy).to.not.have.been.called.lt(3);
spy.should.have.been.called.lt(3);
spy.should.not.have.been.called.below(3);

测试

测试使用 mocha 在 BDD 接口中编写。可以使用 make test 执行节点测试。可以通过打开 test/browser/index.html 查看浏览器测试。

贡献者

项目 : chai-spies 仓库年龄 : 3 年,2 个月 活动 : 26 天 提交 : 77 文件 : 12 作者 : 48 Jake Luer 62.3% 7 Glenn Jorde 9.1% 4 Keith Cirkel 5.2% 3 = 3.9% 3 Sergiy Stotskiy 3.9% 2 JamesMaroney 2.6% 2 PG Herveou 2.6% 2 Ryckes 2.6% 1 Veselin Todorov 1.3% 1 Steffen 1.3% 1 Daniel Walker 1.3% 1 Domenic Denicola 1.3% 1 Andre Jaenisch 1.3% 1 PG 1.3%

许可证

(MIT 许可证)

版权所有 (c) 2012 Jake Luer jake@alogicalparadox.com

特此授予任何人免费获得本软件副本和相关文档文件(“软件”)的副本,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许获得软件的人员这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。

软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对因软件或使用或其他处理软件而产生的任何索赔、损害或其他责任(无论是在合同、侵权行为或其他情况下)负责。