JEST: как заглушить метод, который вызывается в конструкторе класса - PullRequest
0 голосов
/ 16 января 2019

Вот как выглядит пример:

export class ABC {
  constructor() {
    this.method1();
  }

  method1() {
    console.log();
  }
}

Предположим, что в method1 есть некоторые вызовы внешних методов, которые останавливают код для продвижения вперед. Я не хочу идти внутрь method1.

Теперь проблема в том, когда я делаю это:

describe('test cases!', () => {
  let abc: ABC;
  beforeEach(() => {
    spyOn(abc, 'method1').and.stub();
    abc = new ABC();
    jest.resetAllMocks();
  });
});

Выдает ошибку.

После инициализации класса я не могу поставить spyOn. Есть идеи, ребята?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Для ответа на вопрос @ brian-life-outdoors я использую следующее:

describe('test cases!', () => {
  beforeEach(() => {
    ABC.prototype.abc = jest.fn((data) => { result: 'some mock here', data)
    abc = new ABC();
  });
  afterEach(() => {
    ABC.prototype.abc.mockRestore()
  })
});
0 голосов
/ 16 января 2019

method1 существует на ABC.prototype, и вы можете следить за ним и заменить реализацию до создания нового экземпляра ABC:

class ABC {
  constructor() {
    this.method1();
  }
  method1() {
    throw new Error('should not get here');
  }
}

test('ABC', () => {
  const spy = jest.spyOn(ABC.prototype, 'method1');  // spy on the method of the prototype
  spy.mockImplementation(() => {});  // replace the implementation
  const abc = new ABC();  // no error
  expect(spy).toHaveBeenCalled();  // SUCCESS
})
...