除了Jest中的构造函数之外,模拟整个es6类?

时间:2016-01-05 19:49:59

标签: javascript mocking ecmascript-6 jestjs es2015

如果我有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...
    }
}

我希望A类用户可以访问this.foo,因此我不想模拟构造函数。应该嘲笑所有其他方法。我可以手动说A.prototype.doStuff = jest.genMockFunction()ù, and do the same for A.prototype.nukeHouse`,但我希望有这样做的方法,而不必在每次向A添加方法时更新模拟代码。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

我想通用解决方案是简单地迭代prototype并为每个属性创建一个模拟函数:

var A = require.requireActual('./A');

Object.getOwnPropertyNames(A.prototype).forEach(function(prop) {
  A.prototype[prop] = jest.genMockFunction();
});

module.exports = A;

如果班级延伸到另一个班级,这可能会更加困难。