chai-signals 构建状态 npm 版本

chai 库添加了 js-signals 断言。

为 chai 添加了以下断言:

  • dispatched()
  • dispatchedWith()

如何使用

安装

重要:此包中的预期依赖于来自 js-signals 的信号。

npm install chai-signals

创建

首先定义您感兴趣的信号。

var signal = new signals.Signal();
var signalSpy = chai.signals.spyOnSignal(signal);
var signalSpies = chai.signals.createSignalSpyObj([signal1, signal2]);

过滤信号

您可以传递一个布尔函数来指定要注册的哪些分派。

var signal = new signals.Signal();
var signalSpy = chai.signals.spyOnSignal(signal).matching(function (dispatchInfo) {
	return dispatchInfo !== null;
});
signal.dispatch();  // ignored
signal.dispatch(5); // registered

期望

定义间谍后,您可以在测试中设置期望。

expect(signalSpy).to.have.been.dispatched();        // the spy's signal has been dispatched at least once
expect(signalSpy).to.have.been.dispatched(n);       // the spy's signal has been dispatched n times
expect(signal).to.have.been.dispatched();           // the signal has been dispatched at least once
expect(signal).to.have.been.dispatched(n);          // the signal has been dispatched n times
expect(signalSpy).to.not.have.been.dispatched();    // the spy's signal has not been dispatched at all
expect(signalSpy).to.not.have.been.dispatched(n);   // the spy's signal has not been dispatched n times
expect(signal).to.not.have.been.dispatched();       // the signal has not been dispatched at all
expect(signal).to.not.have.been.dispatched(n);      // the signal has not been dispatched at all

expect(signalSpy).to.have.been.dispatchedWith(n);          // the spy's signal has been dispatched using n
expect(signalSpy).to.have.been.dispatchedWith(m, n);       // the spy's signal has been dispatched using (m, n)
expect(signalSpy).to.have.been.dispatchedWith(<object>);   // the spy's signal has been dispatched with using object
expect(signal).to.have.been.dispatchedWith(n);          // the signal has been dispatched using n
expect(signal).to.have.been.dispatchedWith(m, n);       // the signal has been dispatched using (m, n)
expect(signal).to.have.been.dispatchedWith(<object>);   // the signal has been dispatched with using object
expect(signalSpy).to.not.have.been.dispatchedWith(n);          // the spy's signal has not been dispatched using n
expect(signalSpy).to.not.have.been.dispatchedWith(m, n);       // the spy's signal has not been dispatched using (m, n)
expect(signalSpy).to.not.have.been.dispatchedWith(<object>);   // the spy's signal has not been dispatched with using object
expect(signal).to.not.have.been.dispatchedWith(n);          // the signal has not been dispatched using n
expect(signal).to.not.have.been.dispatchedWith(m, n);       // the signal has not been dispatched using (m, n)
expect(signal).to.not.have.been.dispatchedWith(<object>);   // the signal has not been dispatched with using object

AMD

可以将 chai-signals 用作 AMD(异步模块定义)模块。

chai-signals 依赖于 JS-Signals,因此首先定义 signals 路径

require.config({
	paths: {
		signals: 'components/js-signals/signals',
		chai-signals: 'components/chai-signals/lib/chai-signals'
	}
});

然后在 Chai 测试中像这样使用它

define(['myClass', 'chaiSignals'], function(myClass, chaiSignals) {
	it('should signal completed', function () {
		chai.signals.spyOnSignal(myClass.completed);

		myClass.doSomething();

		expect(myClass.completed).to.have.been.dispatched();
	});
});

如果您使用 karma 运行测试,请确保在每个测试文件中包含 chai.use(chaiSignals);

示例

有关用法,请参阅测试

chai-signals.test.js

开发

安装 node.js、bower

npm install
bower install
npm test

许可证

此代码在 MIT 许可下分发。

信用

此插件基于 Adam Nowotny 的 jasmine-signals