🗂

【NestJS】複数のテストファイルを実行するとテストが失敗するようになった場合の対策

2022/03/22に公開

概要

ある日、複数のテストファイルを実行していると意図しない挙動が発生してテストが失敗するようになった

今回はその改善方法をまとめる。

jest --watch --config ./src/test/e2e/jest-e2e.json
 RUNS  src/test/e2e/contractors.e2e.spec.ts
 RUNS  src/test/e2e/contractors.e2e.spec.ts
 FAIL  src/test/e2e/execBackup.e2e.spec.ts (27.724 s)
 RUNS  src/test/e2e/contractors.e2e.spec.ts

QueryFailedError: Table 'agency_widgets' already exists

原因

Jestでは、パフォーマンスのために複数のテストファイルが並行に処理(テスト)されます。しかし、並行処理が思わぬエラーを生むこともあります。
たとえば、データベースへ接続するテストやpuppeteerを使ったE2Eテストなど副作用を生じさせるテストの場合、テストの書き方や実行タイミングによってはテストが失敗したり、想定しないテスト挙動の原因になります。

https://qiita.com/noriaki/items/5d800ea1813c465a0a11

前提

テストコードの書き方は以下を参照ください

https://zenn.dev/naonao70/articles/5167d8c18c81e2

https://zenn.dev/naonao70/articles/67d61979886553

解決方法

# 現在のプロセスで全てのテストを1つずつ実行
--runInBand

# 全テストが終了した後にJestを強制的に終了
--forceExit 

# Jest が何も出力せずに終了するのを防ぐ
--detectOpenHandles

複数のテストファイルが1つずつ順番に処理されます。具体的にはテスト実行用ワーカーの子プロセスを生成せず、元のプロセス上で順次テストファイルを処理していきます。

https://qiita.com/YutamaKotaro/items/798832e108585c7892a4

jest --runInBand --forceExit --detectOpenHandles
GitHubで編集を提案

Discussion