fetch を使ったテストを jest にて行っていたら以下エラーが出た。
ReferenceError: fetch is not defined
cross-fetch やら node-fetch やらを使うという記事がちらほら出てきて、
cross-fetch をしばらく試してみたけどうまくいかなかった。
FormData を使った POST を試みたけど、
content-type が multipart/form-data; boundary=----formdataxxxxxx にならず、
text/plain;charset=UTF-8 になってしまう。
なので他の方法で対応した。
環境
- Next.js v15
- React v19
- Node v22
- Jest v29
サンプルコード
Node が v18 以上で、 Jest が v28 以上じゃないとうまくいかないらしい。
構造
/ ─ CustomJSDOMEnvironment.ts
└ jest.config.ts
CustomJSDOMEnvironment.ts
この記事 によると、
このサンプルコード を参考にすればいいらしい。ほぼコピペ。
import JSDOMEnvironment from "jest-environment-jsdom"
export default class CustomJSDOMEnvironment extends JSDOMEnvironment {
constructor(...args: ConstructorParameters<typeof JSDOMEnvironment>) {
super(...args)
if (!this.global.fetch) {
this.global.fetch = fetch
this.global.Headers = Headers
this.global.Request = Request
this.global.Response = Response
}
}
}
jest.config.ts
大事なところだけ抜粋。
import type { Config } from "jest"
const config: Config = {
testEnvironment: "./CustomJSDOMEnvironment.ts",
}