Babelを使っているときのAVAのテストコード記述について

github.com

JSのトランスパイラとしてBabelを使い、ES2017などでコードを書くようにしている場合、AVAを使ったテストの記述はどうすればよいのだろう。

実はAVAは特に設定も必要なくES2017でテストを記述することができる。
ES2017 support(2018/1/4時点)

が、テストコードの外からインポートされたコードについては、トランスパイルされないようになっており、ES2017のコードが通らない。
Transpiling imported modules(2018/1/4時点)

これを解決するにはBabelのrequire hookを使って、外部のコードを動的にトランスパイルしてインポートする必要がある。

require hookを使うには事前にBabel registerをインストールした上で、テストコードに直接import文を記述するか、 package.json に設定を記述すればよい。

  • テストコードに直接import文を記述する場合
import test from 'ava';
import 'babel-register'; // <- 外部コードを読み込む前にimport文を記述する
...
  • package.json に設定を記述する場合
"ava": {
  "require": [
    "babel-register"
  ]
}

これで、ES2017の外部コードをインポートしたテストも動くようになる。