Следуя Jest Docs, получаю сообщение об ошибке в mockImplementation ().Что я делаю неправильно? - PullRequest
0 голосов
/ 20 сентября 2019

Я делаю все возможное, чтобы следовать документам для шутки, и я также стараюсь учиться самостоятельно.У меня возникла проблема при просмотре документов на официальном сайте шутки.Я нахожусь в разделе издевательских модулей.Это было связано с axios, но я продолжал получать ошибку в машинописи, что mockImplementation не является свойством (независимо от того, что это макет)

Я попытался осмотреться, чтобы убедиться, что это проблема с моим конфигом, ноЯ не могу понять это.

foo.ts

// foo.ts
export default function() {
    // some implementation;
  };

test.ts

import foo from '../src/foo';

// test.js
jest.mock('../src/foo'); // this happens automatically with automocking
foo.mockImplementation(() => 42);
foo();
console.log(foo())

Вот ошибка, которую я получаю на mockImplementatin

Property 'mockImplementation' does not exist on type '() => void'.ts(2339)

All I 'Я делаю, следуя документам.У меня не было проблем, пока я не попал в секцию.

1 Ответ

1 голос
/ 20 сентября 2019

Это foo.ts:

export default function() {
  return 1;
};

... может быть смоделировано следующим образом:

import * as fooModule from '../src/foo';

jest.mock('../src/foo');

const mockedFooModule = fooModule as jest.Mocked<typeof fooModule>;
const foo = mockedFooModule.default;

test('foo', () => {
  foo.mockImplementation(() => 2);
  expect(foo()).toBe(2); // Success!
})

Набрав для Jest, вы получите jest.Mocked, который можно использовать длясгенерировать правильную типизацию для автоматически смоделированной версии модуля.

В этом случае модуль имеет один экспорт default, поэтому эта строка:

const foo = mockedFooModule.default

... назначитfoo к правильно набранному фиктивному экспорту по умолчанию.

...