chai-spies-next
これはChai Spiesのフォークです。masterブランチの最新コードをNPMモジュールに公開するために使用されます。Chai Spiesの開発は停滞しており、長期にわたる issue により優れた機能のリリースが阻害されています。
違い
最近、chai-spiesはreset
メソッドを削除することでリグレッションを導入しました。このモジュールは、メソッドをそのまま使用できるようにすることで、そのリグレッションを元に戻します。
Chai Spies
これはchaiアサーションライブラリのアドオンプラグインです。最も基本的な関数スパイ機能とテストを提供します。小規模なモジュールには便利ですが、おそらくもっと堅牢なものが欲しくなるでしょう。 chai で使用するフル機能のモック/スタブ/スパイアサーションライブラリについては、jackをご覧ください。
このライブラリは、主に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
を検出し、自動的に使用されます。
nodeを使用している場合は、次の点が役立ちます。
var chai = require('chai')
, spies = require('chai-spies');
chai.use(spies);
var should = chai.should()
, expect = chai.expect;
ブラウザ用ビルド
chaiのアドオンを開発している場合、support
フォルダの内容が役立つことがあります。これには、ブラウザで使用するためにディレクトリ内のすべてのjsファイルをパッケージ化するために必要なものがすべて直接含まれています。外部依存関係がない場合、すべてがパッケージ化され、小さなJSパッケージツールであるfolioによって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
より多くの引数が提供されたとしても、スパイが指定された引数で少なくとも1回呼び出されたことをアサートします。
spy('foo');
expect(spy).to.have.been.called.with('foo');
spy.should.have.been.called.with('foo');
spy('foo', 'bar')
とspy(); spy('foo')
にも合格します。
複数の引数で使用する場合、スパイがすべての指定された引数で少なくとも1回呼び出されたことをアサートします。
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
スパイがちょうど1回呼び出されたことをアサートします。
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
スパイがちょうど2回呼び出されたことをアサートします。
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);
テスト
テストは、BDDインターフェースでmochaを使用して記述されています。ノードテストはmake test
を使用して実行できます。ブラウザテストは、test/browser/index.html
を開くことで確認できます。
貢献者
プロジェクト:chai-spies
ライセンス
(MITライセンス)
Copyright (c) 2012 Jake Luer jake@alogicalparadox.com
以下の条件に従う限り、誰でも本ソフトウェアおよび関連ドキュメントファイル(以下「ソフトウェア」)のコピーを無償で入手し、制限なくソフトウェアを使用、複製、変更、マージ、公開、配布、サブライセンス、および/または販売する権利、およびソフトウェアを提供された者に同様の権利を許可する権利が hereby 付与されます。
上記の著作権表示およびこの許可表示は、ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。
本ソフトウェアは「現状有姿」で提供され、商品性、特定目的への適合性、および非侵害性に関する保証を含むがこれらに限定されない、明示または黙示を問わず、いかなる種類の保証もありません。作成者または著作権所有者は、契約、不法行為、またはその他の行為における請求、損害、またはその他の責任について、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因するか、または関連して生じるいかなる場合も責任を負いません。