如何使用 Sinon 存根扩展的 ES6 类构造函数



所以我在存根构造函数和更多继承类构造函数方面遇到了一些问题......我将从一些示例代码片段开始:

父母.js

module.exports = class Parent {
  constructor (){
    // code I don't want to run during tests
  }
}

我的班级.js

let Parent = require('path/to/Parent');
module.exports = class MyClass extends Parent {
  // no overridden constructor
}

摩卡测试

let MyClass = require('path/to/MyClass')
...
test('test1', (done) => {
  // I want to stub the MyClass/Parent constructor before creating a new instance
  // of MyClass so that the constructor code in Parent doesn't run
  let myClass = new MyClass();
  // assertions 'n' stuff
  return done();
});
...

我已经尝试了一些事情,但总是发现无论我做什么,Parent 构造函数中的代码都会运行......我有一种感觉,这可能与MyClass要求父级有关,然后才有机会存根。

我也尝试过使用 rewire 来替换 MyClass 中的变量,但那里也没有快乐;例如

let MyClass = rewire('path/to/MyClass');
MyClass.__set__('Parent', sinon.stub());

关于我如何实现我在这里尝试做的事情的任何建议/帮助?

我没有

使用重新连接,所以我不确定为什么它不起作用,但是使用proxyquire可以正常工作:

const MockParent = sinon.stub()
const MyClass = proxyquire('../../some/path', {
  './Parent': MockParent
})
module.exports = class MyClass extends Parent {
  // no overridden constructor
}

等于:

module.exports = class MyClass extends Parent {
  constructor (...args) {
     super(...args) // be equal to Parent.call(this, ...args)
  }
}

因此,进程是新的MyClass(( -> MyClass constructor(( -> Parent.call(( -> Parent constructor((

最新更新