マニュアルにこう書いてあった。
ES module importsを使用している場合、通常はテストファイルの先頭でimport宣言を書くことが多いでしょう。 しかしモジュールがそれらを使用するのに先立ち、Jestにモックを使用するよう指示する必要があります。 このため、Jestは自動的にjest.mockコールを自動的にモジュールの先頭に(importを行う前に)移動します。
https://jestjs.io/ja/docs/manual-mocks#es-module-import%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B
ハマった
const rootDir = require('app-root-path')
jest.mock(rootDir + '/lib/processor')
const processer = require(rootDir + '/lib/porcesser')
というのがあって、2行目のjest.mock()
は先頭行に移動して実行されるらしい。
つまり、以下のような解釈となり、一行目のrootDir
は未定義となる。
jest.mock(rootDir + '/lib/processor')
const rootDir = require('app-root-path')
const Processor = require(rootDir + '/lib/processor')
ハマる。import/require前以外はエラーにするくらいにしてくれたほうが分かりやすいと思う。