jest машинописное свойство mock не существует для типа - PullRequest
0 голосов
/ 22 сентября 2018

При использовании jest.fn() для добавления макета обычно вы можете получить доступ к свойству .mock для доступа к таким деталям, как вызовы, что-то похожее на это:

test('not working', () => {
    const foo = new Foo();
    foo.addListener = jest.fn();
    foo.func(); // will call addListener with a callback
    const callback = foo.addListener.mock.calls[0][0];
    expect(callback()).toEqual(1); // test the callback
});

При реализации теста в машинописи вместообычный javascript Я получаю сообщение об ошибке:

ошибка TS2339: свойство «mock» не существует для типа «(обратный вызов: () => число) => void».

Я могу избавиться от ошибки, приведя к any, но наверняка должен быть лучший способ:

const callback = (foo.addListener as any).mock.calls[0][0];

В этом простом коде макет может быть переписан для сохранения аргумента с использованием jest.fn(fn => { callback = fn; });но такая же ошибка возникает при использовании foo.addListener.mockClear(), который не может быть переработан таким же образом.

Так, как я могу избавиться от ошибки, желательно без потери безопасности типов?

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете использовать jest.spyOn в сочетании с такими функциями, как mockImplementation, чтобы смоделировать функцию при сохранении безопасности типов в TypeScript:

class Foo {
  addListener = (callback: () => number) => { }
  func = () => {
    this.addListener(() => 1);
  }
}

test('working', () => {
  const foo = new Foo();
  const mockAddListener = jest.spyOn(foo, 'addListener'); // spy on foo.addListener
  mockAddListener.mockImplementation(() => { }); // replace the implementation if desired
  foo.func(); // will call addListener with a callback
  const callback = mockAddListener.mock.calls[0][0];
  expect(callback()).toEqual(1); // SUCCESS
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...