ES6の書式でJestでテストする (Bebelなしで)

やりたいこと

  • Jest を使ったテストを導入したい
  • ただ、 require じゃなくて import とかのES6の構文を使いたい
  • Babelの設定とかで消耗したくない

注意事項

JestのES Modulesサポートはまだ実験段階で、サポートされてない機能が結構あるらしい。

github.com

やり方

jest の導入

普通に npm でインストールする。 --save-dev で開発時のみ必要なDependencyであることを明示する。

npm install jest --save-dev

package.json の編集

  • "scripts": { "test": "..." } 部分の編集
  • "jest" { "transform": {} } の追加

がポイント

{
  "name": "paiza",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/.bin/jest"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "jest": "^26.6.3"
  },
  "jest": {
    "transform": {}
  }
}

transformの無効化

ドキュメントによれば、

  • コードの変換を無効化する (-> transform: {} を指定する)
  • 変換先をCommonJSじゃなくてESMにする

のいずれかが必要。今回できればBabelを使いたくないので、一つ目を採用。

nodeの --experimental-vm-modules フラグの追加

そもそも node 自体に --experimental-vm-modules フラグを渡さないとES Modulesの import を認識してくれない。 よって、テストを実行する際にこのパラメータを加えておく。

参照

基本的に以下のドキュメントに従えばOK。

jestjs.io