如何在ES6中使用sinon存根静态方法?

Ros*_*nko 17 stub node.js sinon

var MyClassStub = sinon.createStubInstance(MyClass);
Run Code Online (Sandbox Code Playgroud)

MyClassStub不包含静态方法.如何解决?

dan*_*y74 17

静态方法:

sinon.stub(YourClass, 'yourClassMethod').callsFake(() => {
  return {}
})
Run Code Online (Sandbox Code Playgroud)

不是静态的方法:

sinon.stub(YourClass.prototype, 'yourClassMethod').callsFake(() => {
  return {}
})
Run Code Online (Sandbox Code Playgroud)


S.M*_*hra 8

使用 sinon 3.1.0 版,我可以使用下面给出的代码模拟(存根)私有静态变量:

const YourClass = require('./lib/YourClass');
const mockStaticMethod = sinon.stub(YourClass, '_yourStaticMethod').returns('I am called');
Run Code Online (Sandbox Code Playgroud)

唯一需要记住的是 sinon.stub() 方法中的第一个参数应该是类本身。它不应该像const yourClassObject = new YourClass();. 原因是该类的任何对象都不允许您访问静态方法。