Дразнить весь класс es6 кроме конструктора в Jest?
Если у меня есть класс А, вот так:
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...
}
}
Я бы хотел, чтобы пользователи класса А имели доступ к this.foo
так что я не хочу издеваться над конструктором. Все остальные методы должны быть опровергнуты. Я, наверное, могу сказать вручную A.prototype.doStuff = jest.genMockFunction()ù, and do the same for
A.prototype.nukeHouse`, но я надеюсь, что есть способ сделать это без необходимости обновлять код насмешки каждый раз, когда я добавляю метод в A.
Есть ли способ сделать это?
1 ответ
Решение
Я думаю, что общее решение было бы просто перебрать prototype
и создайте фиктивную функцию для каждого свойства:
var A = require.requireActual('./A');
Object.getOwnPropertyNames(A.prototype).forEach(function(prop) {
A.prototype[prop] = jest.genMockFunction();
});
module.exports = A;
Это может быть сложнее, если класс расширяет другой класс.