ikmnjrd.github.io

Jest(ts-jest)で作ったはずのmockがundefinedになるエラー

Posted on 2022-09-19
目次

結論

ts-jest?esmで書いてるから?とりあえずでimportするのやめよう。

状況

Jestの右も左もわからないがfetcをmockしてゴニョゴニョしていた。
公式の例にもnode-fetchを使った例が載ってるぐらいなので、コピペして動かそうとしていたら問題発生。

以下のエラーが発生した。

TypeError: mockGetImageFromWeb.mockClear is not a function
  23 |
  24 |   afterEach(() => {
> 25 |     mockGetImageFromWeb.mockClear()
     |                         ^
  26 |   })
  27 |   test('should be defined', () => {
  28 |     expect(getImageFromWeb).toBeDefined()

コピペしたコードはこれ

import {expect, jest, test} from '@jest/globals';
import type {fetch} from 'node-fetch';

jest.mock('node-fetch');

let mockedFetch: jest.Mocked<typeof fetch>;

afterEach(() => {
  mockedFetch.mockClear();
});

test('makes correct call', () => {
  mockedFetch = getMockedFetch();
  // ...
});

test('returns correct data', () => {
  mockedFetch = getMockedFetch();
  // ...
});

対応

コピペしてきたtestファイルで以下のインポート文を削除したら動いた。

import { expect, jest, test } from '@jest/globals'

参考文献