所以我在使用存根构造函数时遇到了一些问题,并且更多的继承类构造函数... 我将从一些示例代码片段开始:
Parent.js
module.exports = class Parent {
constructor (){
// code I don't want to run during tests
}
}
MyClass.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();
});
...
我已经尝试了一些事情,但总是发现父构造函数中的代码无论我做什么都会运行...我有一种感觉它可能与MyClass需要Parent之前有关把它存下来的机会。
我也尝试过使用重新连接替换MyClass中的变量,但也没有喜欢那里; e.g。
let MyClass = rewire('path/to/MyClass');
MyClass.__set__('Parent', sinon.stub());
关于我如何实现我在这里尝试做的任何建议/帮助?
答案 0 :(得分:0)
我没有使用重新连接所以我不确定为什么它不起作用但是使用proxyquire来保存父构造函数可以正常工作:
const MockParent = sinon.stub()
const MyClass = proxyquire('../../some/path', {
'./Parent': MockParent
})
答案 1 :(得分:0)
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构造函数() - > Parent.call() - >父构造函数()