最近の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); });
なかなか良さそうなのでしばらくこれを使おうと思う。