Дразнить весь класс 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 forA.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;

Это может быть сложнее, если класс расширяет другой класс.

Другие вопросы по тегам