できない.dev

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.js

2. 既定のパターンに足す

独自の名前も拾いたいときは、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 で終わる。
ただしテストの置き場所の誤りまで隠れるので、テストが揃ったら外す。

よくある原因

  1. 命名が既定のパターンに合わない: .test / .spec の前のドットが抜けている、別の語を使っている、などで 0 件になる。
  2. include を上書きした: 公式ドキュメント(新しいタブで開く)のとおり、include を書くと既定値は置き換わる。include: ['src/**/*.test.js'] と書いた状態では、tests/ にある sum.spec.js は拾われなくなった。
    パターンは root(既定はカレントディレクトリ)からの相対で解釈される。
  3. 絞り込みの文字列が合わない: vitest run foo の foo は、テストファイルのパスに含まれるかどうかで判定される(Test Filtering(新しいタブで開く))。
    合うものが無いと、表示に filter: foo の行が加わって同じく終了コード 1 になる。
  4. テストがまだ無い: プロジェクトを作った直後に CI へ vitest run を入れると、最初の実行で落ちる。

この手順で直った?