所以我在存根构造函数和更多继承类构造函数方面遇到了一些问题......我将从一些示例代码片段开始:
父母.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((