30歳からのプログラミング

30歳無職から独学でプログラミングを開始した人間の記録。

mochaでimportやexportを使ったテストコードを書く

ES2015を使ってmochaのテストコードを書きたい。
具体的には、importexport
他の仕様には概ね対応していると思うが、これらモジュール機能は、現在のところmochaでは使えない。
そのため、テストコードのなかでこれらを使うとエラーになってしまう。

テストでexportを使うことはあまりない気がするが、importは頻出である。
例えば、Sinon.jsというテスト用のライブラリがあるが、これをimportしようとするとエラーになってしまい、そもそもテストすることが出来ない。

import sinon from 'sinon';
const assert = require('assert');

describe('sinon', () => {
  it('has spy', () => {
    assert(Object.prototype.hasOwnProperty.call(sinon, 'spy'));
  });
});

SyntaxError: Unexpected token importというエラーが出る。

Babelでトランスパイルしてからテストを行うようにすることで、これを解決できる。

まずは、必要なモジュールをインストールする。

$ npm i -D babel-register babel-preset-es2015

次に、.babelrcを作成してBabelの設定を行う。

{
  "presets": [
    "es2015"
  ]
}

最後に、./test/mocha.optsを作成。
これは、mochaの設定ファイルである。
このファイルに以下のように書くことで、テスト実行時にBabelによるトランスパイルを行ってくれるようになる。

--compilers js:babel-register

先程のテストコードを実行すると、動いていることが分かる。

sinon
  ✓ has spy


1 passing (17ms)

なお、./test/mocha.optsを作成せず、package.jsonのnpmスクリプトに設定を書いても、同じことが出来る。

  "scripts": {
    "test": "mocha --compilers js:babel-register"
  },

この状態で$ npm testを実行すれば、先程と同じ結果を得られる。