存根带参数的函数

Kar*_*son 3 javascript sinon

我正在尝试存根一个接受参数的方法。

我通常像这样使用我的对象:

const res = await Obj.find('admin', 'type');
Run Code Online (Sandbox Code Playgroud)

这有效。它要么返回 null 要么返回一个对象。

我通常像这样存根:

sandbox.stub(Obj.prototype, 'find', function () {
  return Promise.resolve({ id: 123 });
});
Run Code Online (Sandbox Code Playgroud)

我想存根,以便考虑参数。我一直在阅读http://sinonjs.org/docs/#stubs,它应该如下所示:

const stub = sinon.stub(Obj.prototype.find);
stub.withArgs('admin', 'type')
  .returns(Promise.resolve({ id: 123 }));
stub.withArgs('user', 'type').returns(null);
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:

 TypeError: Attempted to wrap undefined property undefined as function
  at Object.wrapMethod (node_modules/sinon/lib/sinon/util/core.js:114:29)
  at Object.stub (node_modules/sinon/lib/sinon/stub.js:67:26)
Run Code Online (Sandbox Code Playgroud)

console.log(Obj.prototype.find); 结果是:

[Function: find]
Run Code Online (Sandbox Code Playgroud)

Kar*_*son 8

啊哈,我几乎是正确的。下面是工作代码:

const stub = sinon.stub(Obj.prototype, 'find');
stub.withArgs('admin', 'type')
  .returns(Promise.resolve(new User({ id: 123 })));
stub.withArgs('user', 'type').returns(null);
Run Code Online (Sandbox Code Playgroud)