最近は Babel で変換することを前提に ECMAScript 2015 (ECMAScript 6 と呼ばれていたもの) を書くことが多いです。テスト中に power-assert もよく使うのですが、この組み合わせにハマりどころがあったので、メモも兼ねて書いておきます。
インストール
Babel と power-assert の両方を使うために、 espower-babel
を使います。
$ npm install -D espower-babel mocha power-assert
テストコード
テストコードを power-assert
と ES2015 の機能を使って書いていきます。
// test.js
import assert from 'power-assert';
describe('number', () => {
it('1 + 1 = 2', () => {
assert(1 + 1 === 2);
});
});
Arrow Function を使っています。
テストの実行
このテストコードを Mocha で実行していきます。 espower-babel を使うために --compilers js:espower-babel/guess
というオプションを指定します。 今回は必要ないですが ES 2015 の Polyfill を使うためには、 babel
をインストールしてオプションに --require babel/polyfill
と加える必要があります。
$ mocha --compilers js:espower-babel/guess test.js
たったこれだけで・・・とはなりません。このコマンドを実行するとエラーが出ます。エラーメッセージをよく見ると test.js が babel で変換されていません。
この動作は espower-babel の仕様で、変換をするのは test
ディレクトリの中のファイルだけになっているのが原因です。これを回避する方法はいくつかあります。
- テストコードはすべて
test
ディレクトリに入れる - 自分で
--compiler
に渡すモジュールを作る package.json
のdirectories
のtest
にそのファイルがあるディレクトリを指定する
自然と 1 を満たす場合も多いと思います。 2 は細かく制御できるのはメリットかも知れませんが面倒くさいです。 test
ディレクトリ以外の場所にテストコードを起きたい場合は、 3 が一番簡単だと思います。
src
ディレクトリの中にテストコードがある場合、次の用に指定します。
{
"directories": {
"test": "src"
},
...
}
これで espower-babel がコードをきちんと変換してくれる用になります。
もし package.json
と同じ階層にテストコードがある場合は "."
と指定します。
babelrc
それ以外だと .babelrc
ではまりました。 espower-babel
は勝手に .babelrc
を読み込むので "ignore": ["*.spec.js"]
なんで書いてあると変換してくれなくなってしまいます。
自分はリリース用に babel
を使っているときやってしまいました。
最後に
Babel も power-assert も便利なのでどんどん使っていきましょう。