web-dev-qa-db-ja.com

SinonJSを使用して同じ関数をスタブおよびスパイしますか?

次の例では、 stubget関数を使用して、実際のHTTP要求が発生しないようにしています。 spy ongetメソッドを呼び出して、どの引数で呼び出されたかを確認したい。

var request = require('request'), sinon = require('sinon');
describe('my-lib', function() {
  sinon.stub(request, 'get').yield(null, null, "{}");
  var spy = sinon.spy(request, 'get');
  it('should GET some data', function(done) {
    function_under_test(function(err, response) {
      if(error) return done(error);
      assert(request.get.called);
      assert(request.get.calledWith('some', 'expected', 'args'));
    });
  });
});

しかし、シノンは同じ方法をスパイしたりスタブしたりすることを許可していないようです。上記の例では、次のエラーが発生します。

TypeError: Attempted to wrap get which is already wrapped

デフォルトの動作を防止しながら、メソッドをスパイするにはどうすればよいですか?

27
Armand

スタブは、スパイのすべてのメソッドをサポートします。スパイを作成しないでください。

53
Robert Moskal