見出し画像

【Jest_66】 ReferenceError: describe is not defined の対処法

以下は、Jest や Node.js テスト実行時に多くの人が直面するエラー

ReferenceError: describe is not defined


ReferenceError: describe is not defined 


結論(まずこれをチェック)

このエラーは主に以下のどれかが原因です:

1. Jestが動いていない
 describe は Jest のグローバル関数
 Jest経由で実行せよ
2. 実行コマンドが node
 node test.js は NG
 npx jest や npm test で実行
3. テスト環境の設定漏れ
 jest.config.js 未設定
 設定ファイルで testEnvironment など確認
4. VSCodeで補完されない
 型補完が効かない
 tsconfig.json の types を確認
5. グローバルスコープ外で呼んでいる
 describe を関数スコープ外に書いてる
 スコープ構造を見直し


エラーの全文(例)

ReferenceError: describe is not defined

    at Object.<anonymous> (/path/to/your/test.js:2:1)

describe とは何か?

describe は Jest(やMochaなど)が提供するテストブロックの定義関数です:

describe('MyComponent', () => {
  test('does something', () => {
    expect(1 + 1).toBe(2);
  });
});

つまり、Jestなどのテストランナー経由で実行しなければ存在しない関数なのです。


間違った実行例

node myTestFile.test.js   ❌ ← これが原因!
ts-node myTestFile.test.ts ❌ ← JestのAPIがない!

✅ 正しい実行方法(Jest)

npx jest           ✅ 最短
npm run test       ✅ package.jsonにscriptがある場合
yarn jest

例:package.json の script に登録

{
  "scripts": {
    "test": "jest"
  }
}

対処法ステップ by ステップ


1. Node実行をやめる

NG:

node sample.test.js

OK:

npx jest

理由:Node.js単体では describe や test は定義されていません。


2. Jest の依存を確認

npm ls jest

未インストールなら:

npm install --save-dev jest

3. ファイル名の命名規則を確認

Jestはデフォルトで以下の名前のファイルをテスト対象と認識します:

*.test.js
*.spec.js

例:

src/__tests__/myUtil.test.ts

4. TypeScript 対応:ts-jest 導入

npm install --save-dev ts-jest @types/jest
npx ts-jest config:init

jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

5. tsconfig.json に型を補完させる

{
  "compilerOptions": {
    "types": ["jest"]
  }
}

補完されないと describe や expect に赤線が出る原因になります。


6. IDEで Jest プラグインを有効に(VSCode)

  • VSCode 拡張:「Jest」「Jest Runner」などをインストール

  • エディタで右クリック →「Jestでテストを実行」


7. Babelを使っている場合の注意

npm install --save-dev babel-jest @babel/preset-env

babel.config.js に以下を追加:

module.exports = {
  presets: ['@babel/preset-env'],
};

テンプレ:テストファイル例(動作確認用)

// math.test.ts
describe('Math tests', () => {
  test('1 + 1 = 2', () => {
    expect(1 + 1).toBe(2);
  });
});

実行:

npx jest math.test.ts

よくある誤解とその対処

describe is not defined
 Nodeで実行すれば動くと思っていた
 Jestで実行する必要がある
VSCodeで補完されない
 Jestが使えないと思った
 tsconfig.jsonに "types": ["jest"] を追加する
CIで describe が undefined
 jest 依存を入れてない
 devDependenciesに jest を入れる


Jest vs Mocha の違いと注意点

Jest
 describe が使える?: ✅
 実行方法: npx jest
 フル機能
Mocha
 describe が使える?: ✅
 実行方法: npx mocha
 アサーションは別途用意
Node.js 単体
 describe が使える?: ❌
 実行方法: -
 describe は使えない


最小構成で動くサンプル(TypeScript)

パッケージ

npm init -y
npm install --save-dev jest ts-jest typescript @types/jest
npx ts-jest config:init

ファイル構成

├── jest.config.js
├── tsconfig.json
└── src/
    └── sum.test.ts

sum.test.ts

describe('sum function', () => {
  it('adds 1 + 2 to equal 3', () => {
    expect(1 + 2).toBe(3);
  });
});

実行

npx jest

まとめ

実行方法
 node ではなく jest で実行する
Jest導入
 npm install --save-dev jest
ファイル名
 .test.js or .spec.ts にする
TypeScript補完
 @types/jest + tsconfig.json に "types"
Babel or ts-jest設定
 必要に応じて設定


それでも直らないときは?

以下を添えて質問すれば迅速にサポート可能です:

  • 実行コマンド

  • jest.config.js の内容

  • 該当テストファイルのコード

  • TypeScript or JavaScript のどちらか



いいなと思ったら応援しよう!