使用 SinonJS 对同一个函数进行存根和监视?

Use SinonJS to stub and spy on the same function?

在下面的示例中,我想 stub the get function to prevent the actual HTTP request from occurring. I want to spy on get 方法来检查它调用的参数。

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'));
    });
  });
});

但 Sinon 似乎不允许使用相同的方法进行监视和存根。上面的例子给出了以下错误:

TypeError: Attempted to wrap get which is already wrapped

如何在防止默认行为的同时监视方法?

存根支持间谍的所有方法。只是不要制造间谍。