モカのbeforeEachブロックできれいに動作するすべてのsinon spysモックとスタブを簡単にリセットする方法はありますか?.
サンドボックス化はオプションですが、このためにサンドボックスを使用する方法はわかりません
beforeEach ->
sinon.stub some, 'method'
sinon.stub some, 'mother'
afterEach ->
# I want to avoid these lines
some.method.restore()
some.other.restore()
it 'should call a some method and not other', ->
some.method()
assert.called some.method
Sinonは Sandboxes を使用してこの機能を提供します。これはいくつかの方法で使用できます。
// manually create and restore the sandbox
var sandbox;
beforeEach(function () {
sandbox = sinon.sandbox.create();
});
afterEach(function () {
sandbox.restore();
});
it('should restore all mocks stubs and spies between tests', function() {
sandbox.stub(some, 'method'); // note the use of "sandbox"
}
または
// wrap your test function in sinon.test()
it("should automatically restore all mocks stubs and spies", sinon.test(function() {
this.stub(some, 'method'); // note the use of "this"
}));
@keithjgrant回答の更新。
バージョンv2.0.0以降、sinon.testメソッドは 別のsinon-test
モジュール に移動しました。古いテストに合格するには、各テストでこの追加の依存関係を構成する必要があります。
var sinonTest = require('sinon-test');
sinon.test = sinonTest.configureTest(sinon);
または、sinon-test
を使用せずに sandboxes を使用します。
var sandbox = sinon.sandbox.create();
afterEach(function () {
sandbox.restore();
});
it('should restore all mocks stubs and spies between tests', function() {
sandbox.stub(some, 'method'); // note the use of "sandbox"
}
以前の回答では、これを達成するためにsandboxes
を使用することが推奨されていますが、 ドキュメント に従っています。
[email protected]以降、sinonオブジェクトはデフォルトのサンドボックスです。
つまり、スタブ/モック/スパイのクリーンアップが次のように簡単になりました。
var sinon = require('sinon');
it('should do my bidding', function() {
sinon.stub(some, 'method');
}
afterEach(function () {
sinon.restore();
});
Sinonライブラリの作成者による this ブログ投稿(2010年5月付け)に示されているように、sinon.collectionを使用できます。
Sinon.collection apiが変更され、使用方法は次のとおりです。
beforeEach(function () {
fakes = sinon.collection;
});
afterEach(function () {
fakes.restore();
});
it('should restore all mocks stubs and spies between tests', function() {
stub = fakes.stub(window, 'someFunction');
}
すべてのテストでsinonを常にリセットするセットアップが必要な場合:
helper.js内:
import sinon from 'sinon'
var sandbox;
beforeEach(function() {
this.sinon = sandbox = sinon.sandbox.create();
});
afterEach(function() {
sandbox.restore();
});
その後、テストで:
it("some test", function() {
this.sinon.stub(obj, 'hi').returns(null)
})
restore()
は、スタブ化された機能の動作を復元するだけですが、スタブの状態はリセットしません。テストをsinon.test
でラップしてthis.stub
を使用するか、スタブでreset()
を個別に呼び出す必要があります。
Mochaの代わりにqunitを使用する場合、これらをモジュールにラップする必要があることに注意してください。
module("module name"
{
//For QUnit2 use
beforeEach: function() {
//For QUnit1 use
setup: function () {
fakes = sinon.collection;
},
//For QUnit2 use
afterEach: function() {
//For QUnit1 use
teardown: function () {
fakes.restore();
}
});
test("should restore all mocks stubs and spies between tests", function() {
stub = fakes.stub(window, 'someFunction');
}
);