Node.jsのテストツールAVA

最近のNode界隈ではAVAというテストツールがイケているという噂なので試した。

GitHub - avajs/ava: 🚀 Testing can be a drag. AVA helps you get it done.

import test from 'ava';

test('foo', t => {
    t.pass();
});

test('bar', async t => {
    const bar = Promise.resolve('bar');
    t.is(await bar, 'bar');
});

import、ES Moduleだ。

ES Moduleはtc39のstage 3で、Nodeではv11で試験的に採用されているのみ。AVAは最新のJS文法で書けるようにするためbabelでトランスパイルして実行いるらしい。そんな事をしているにも関わらず実行は高速。テストファイル毎にNodeプロセスを立て、並列、非同期で実するため高速なテスト実行が可能になっているらしい。

直列化することも一応できる。

test.serial('passes serially', t => {
    t.pass();
});

async function や promise に対応しているのも嬉しい。テスト関数をアロー関数で書けるのもマル(mochaはmochaオブジェクトのコンテキストでテスト関数を実行するため、コンテキストを変更できないアロー関数は非推奨)。そしてアサーションはfailするとPower Assertのような詳細なエラーレポートが出る。AVAの文法をeslintに認識させるためのプラグインも用意されており隙がない。

promise や async function 対応ばかりに注目してしまうが、既存のcallbackにも対応している。

test.cb('data.txt can be read', t => {
    fs.readFile('data.txt', t.end);
});

なかなか良さそうなのでしばらくこれを使おうと思う。