🌪

Jest encountered an unexpected token に遭遇したら

2020/09/25に公開

発生した環境

Name Version
Node 12.14.1
Nuxt.js 2.13.0
Jest 26.1.0
ts-jest 26.1.3
vue-jest 3.0.6

エラー内容

Nuxt.js + TypeScript のプロジェクトでテストを作成して Jest を実行したところ、以下のようなエラーが発生しました。

Jest encountered an unexpected token
...略...
SyntaxError: Unexpected token } in JSON at position 503

エラースタックによると発生源は node_modules/tsconfig/dist/tsconfig.js:135:17 となっています。

解決方法

tsconfig.json を確認すると、以下のように「通常の JSON」としては不適切な位置にカンマが入っていました。

...略...
"paths": {
  "~/*": [
    "./*"
  ], // ← これが怪しい
}, // ← } が 503 文字目 
...略...

このカンマを削除したところ、無事にテストが実行できました。めでたしめでたし。

余談

エラー元の tsconfig というパッケージについて調べたら TypeScript 公式のものではなく、しかも 3 年前から更新されていませんでした。

プロダクションコードの TypeScript はトランスバイルできていたので tsconfig.json は問題ないはずと思い込み、しばらくエラー文で検索したりして解決までに時間がかかりました。
TypeScript のコンパイラは tsconfig.json を JSONC(拡張フォーマット)として扱うのでコメントや余分なカンマが入っていても問題なくパースしてくれますが、上記の tsconfig パッケージでは末尾カンマがエラーになってしまうのですね。

Discussion