Vitest で「No test files found, exiting with code 1」が出てテストを実行できない
No test files found, exiting with code 1 は、テストファイルが 0 件だと出る。
ファイル名に .test か .spec を付けるか、include や絞り込みの文字列を直せば直る。
公開:
要約
vitest run を実行すると、テストが 1 本も動かずに終わる(終了コード 1)。
No test files found, exiting with code 1
include: **/*.{test,spec}.?(c|m)[jt]s?(x)
exclude: **/node_modules/**, **/.git/**Vitest は include のパターンに合い、exclude に合わないファイルだけをテストとして集める。
表示の下 2 行がそのとき使ったパターンなので、まずここを読む。
既定の include は名前に .test か .spec を含む JavaScript / TypeScript のファイルで、sum.check.js や sumspec.js のような名前は拾われない。
上の表示は Vitest 5.0.3・Node.js 22 で、テストを tests/sum.check.js と tests/sumspec.js という名前で置いて実行したものだ。
解決策
1. ファイル名をそろえる
mv tests/sum.check.js tests/sum.test.js2. 既定のパターンに足す
独自の名前も拾いたいときは、configDefaults.include を展開して既定を残したまま追加する。
// vitest.config.ts
import { defineConfig, configDefaults } from "vitest/config";
export default defineConfig({
test: {
include: [...configDefaults.include, "tests/**/*.check.js"],
},
});この設定で sum.spec.js と sum.check.js の 2 ファイルがどちらも実行された。
3. 絞り込みはパスの一部を渡す
CLI のドキュメント(新しいタブで開く)によると、この絞り込みは部分一致だけで、glob や正規表現は使えない。sum.spec.js なら vitest run sum で 1 ファイルだけ実行できた。
4. テストが無いことを許すなら --passWithNoTests
vitest run --passWithNoTests表示は No test files found, exiting with code 0 に変わり、終了コード 0 で終わる。
ただしテストの置き場所の誤りまで隠れるので、テストが揃ったら外す。
よくある原因
- 命名が既定のパターンに合わない:
.test/.specの前のドットが抜けている、別の語を使っている、などで 0 件になる。 includeを上書きした: 公式ドキュメント(新しいタブで開く)のとおり、includeを書くと既定値は置き換わる。include: ['src/**/*.test.js']と書いた状態では、tests/にあるsum.spec.jsは拾われなくなった。
パターンはroot(既定はカレントディレクトリ)からの相対で解釈される。- 絞り込みの文字列が合わない:
vitest run fooのfooは、テストファイルのパスに含まれるかどうかで判定される(Test Filtering(新しいタブで開く))。
合うものが無いと、表示にfilter: fooの行が加わって同じく終了コード 1 になる。 - テストがまだ無い: プロジェクトを作った直後に CI へ
vitest runを入れると、最初の実行で落ちる。