При использовании 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()
, который не может быть переработан таким же образом.
Так, как я могу избавиться от ошибки, желательно без потери безопасности типов?