今回はReactアプリを作成する際にReferenceError: fetch is not defined
エラーが出た際の解消方法をエントリーします。
ケースとしてはcreate react app
ではなくwebpack
やvite
でアプリを作成しアプリ内でfetch
を使いAPIなどを利用したケースをJest + Testing libraryでテストを行った際にReferenceError: fetch is not defined
が発生しました。
エラー概要
コンポーネントで呼び出しているfetch
でエラーとなっています。
ReferenceError: fetch is not defined 26 | const handleClick = async (user: User) => { 27 | > 28 | const response = await fetch('http://localhost:8080/xxxx', { | ^ 29 | method: 'POST', 30 | mode: 'cors', 31 | cache: 'no-cache',
解消方法
cross-fetch/polyfillを用いて解消します。
npm install --save-dev cross-fetch
テストコードサンプル
import 'cross-fetch/polyfill'
でポリフィルをimport
<Sample />
コンポーネントが今回fetch
を利用しているコンポーネントです。
import { render, screen } from '@testing-library/react' import 'cross-fetch/polyfill' describe('Sample', () => { it('test', async () => { render( <Sample /> ) expect(screen.getByText('テストコード')).toBeInTheDocument() } }