2016-05-20 14 views
2

sinon.jsにメソッドを1回だけスタブする可能性があるのでしょうか?例えばSinon.js、一度だけメソッドをスタブしますか?

:私のテストで

sinon.stub(module, 'randomFunction', 'returnValue/function'); 

このmodule.randomFunctionが同じテストで複数回呼び出されますが、私は唯一のスタブが一度トリガーして、それを復元したいです機能は正常な動作に戻ります。実際のコードの

シミュレーション:

myModule.putItem(item, function (err, data) { 
    if (err) { 
    // do stuff 
    return callback(); 
    } else { 
    // do other stuff 
    return callback(null, data); 
    } 
}); 

私はエラーをトリガする最初の時間、他の回は、私はちょうどそれが本当の流れを継続したいです。

これはサイロンで可能ですか?

敬具、

ジミー

編集:私は、はい、それは可能である@Grimurd

+0

スタブが同じテスト*で複数回呼び出される*と明示的に言及するように変更されました。 – jruts

+0

もっと現実的な例を追加しました。 – jruts

答えて

1

の回答に基づいて、私は私の問題が見つかり解決策を掲載。テストフレームワークとしてmochaを使用していると仮定します。

describe('some tests', function() { 
    var sandbox; 

    beforeEach(function() { 
     sandbox = sinon.sandbox.create(); 
    }); 

    afterEach(function() { 
     sandbox.restore(); 
    }) 

    it('is a test with a stub', function() { 
     // This gets restored after each test. 
     sandbox.stub(module, 'randomFunction', 'returnValue/function'); 
    }) 
}) 

詳細については、sinon sandbox apiをご覧ください。

describe('some tests', function() { 
    var sandbox; 

    beforeEach(function() { 
     sandbox = sinon.sandbox.create(); 
    }); 

    afterEach(function() { 
     sandbox.restore(); 
    }) 

    it('is a test with a stub', function() { 
     // This gets restored after each test. 
     sandbox.stub(module, 'randomFunction') 
      .onFirstCall().returns('foo') 
      .onSecondCall().returns('bar') 
      .onThirdCall().returns('foobar'); 
    }) 
}) 

はstub.onCall(n)のためhttp://sinonjs.org/docs/検索に文書化

あなたの実際の問題に答えるために、UPDATE

+0

私はおそらくそれを正確にはフレーズしませんでしたが、私はスタブが同じテストで複数回呼び出されることを意味しました。 – jruts

3

ソリューション:

sandbox.stub(module, 'putItem') 
    .onFirstCall().yields('ERROR') 
    .onSecondCall().yields(null, item) 

@grimurdの回答に基づいて、私はそれを「利回り」で処理することができました。 Yieldsは元のメソッドのシグネチャで最初に検出されたコールバック関数をトリガします。

最初の呼び出しでは、基本的にはcallback('error')と言い、2番目の呼び出しではcallback(null, item)と言います。 )答えを

おかげで、コールバックが利回りよりも優れたメソッド名であったであろう場合

はどういうわけか、私は疑問に思うん!

関連する問題