模拟整个 es6 class 除了 Jest 中的构造函数?
Mock entire es6 class except constructor in Jest?
如果我有一个class A,像这样:
class A{
constructor(foo){
this.foo = foo;
}
doStuff(){
//Code protected by an NDA, they'll nuke my house if I tell you what it does.
}
nukeHouse(){
//The implementation of this is somewhat buggy...
}
}
我希望 class A 的用户能够访问 this.foo
,所以我不想模拟构造函数。应该模拟所有其他方法。我可能可以手动说 A.prototype.doStuff = jest.genMockFunction()ù, and do the same for
A.prototype.nukeHouse`,但我希望有一种方法可以做到这一点,而不必每次向 A.
添加方法时都更新模拟代码
有办法吗?
我想通用的解决方案是简单地遍历 prototype
并为每个 属性:
创建一个模拟函数
var A = require.requireActual('./A');
Object.getOwnPropertyNames(A.prototype).forEach(function(prop) {
A.prototype[prop] = jest.genMockFunction();
});
module.exports = A;
如果 class 扩展另一个 class,这可能会更困难。
如果我有一个class A,像这样:
class A{
constructor(foo){
this.foo = foo;
}
doStuff(){
//Code protected by an NDA, they'll nuke my house if I tell you what it does.
}
nukeHouse(){
//The implementation of this is somewhat buggy...
}
}
我希望 class A 的用户能够访问 this.foo
,所以我不想模拟构造函数。应该模拟所有其他方法。我可能可以手动说 A.prototype.doStuff = jest.genMockFunction()ù, and do the same for
A.prototype.nukeHouse`,但我希望有一种方法可以做到这一点,而不必每次向 A.
有办法吗?
我想通用的解决方案是简单地遍历 prototype
并为每个 属性:
var A = require.requireActual('./A');
Object.getOwnPropertyNames(A.prototype).forEach(function(prop) {
A.prototype[prop] = jest.genMockFunction();
});
module.exports = A;
如果 class 扩展另一个 class,这可能会更困难。