できない.dev

Vitest で「describe is not defined」が解決できない(globals 未設定)

Vitest は既定で describe / it / expect をグローバルに公開しない。
test.globals を true にするか、各ファイルで vitest から読み込めば describe is not defined を解消できる。

#vitest#globals#config

公開:

要約

describe is not definedit / expect でも同様)は、Vitest が既定でテスト API をグローバルへ公開しないために出る。

Vitest は明示性を重視して、既定では describe などを各ファイルで読み込ませる方針になっている。

設定で globals: true にするか、各ファイルで vitest から読み込めば解消する(公式: globals)。

よくある原因

  1. Vitest は既定で global API を提供しない。
  2. Jest から移行し、テスト関数を読み込まずに使っている。
  3. globals: true にしたが、TypeScript の型設定が無く型エラーになる。

型エラー(Cannot find name 'describe' など)と実行時エラー(ReferenceError)は別物で、前者は tsconfig の types 設定、後者は globals の有効化または読み込み不足が原因になりやすい。

どちらの症状かを先に切り分けると、設定すべき箇所が一意に決まる。

解決策

1. config で globals を有効化する

import { defineConfig } from 'vitest/config';
 
export default defineConfig({
  test: { globals: true },
});

2. 各テストで読み込む

import { describe, it, expect } from 'vitest';

globals を使わない方針なら、ファイルごとに明示的に読み込む。

3. TypeScript の型を通す

{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}

この記事は役立ちましたか?