AVA + TypeScriptでイケイケテスティング
やっほー、みんな元気かい?ううたろだよ!(唐突なYouTuber感)
今日はAVAというライブラリ+TypeScriptでテストを少しだけ書いてみたから紹介するよ!
AVAとは
これ。JavaScriptのテスティングフレームワークのこと。
ロゴがでんぱ組のロゴに似ていたので採用しました。
準備
単にJSであればUsageの所に書いてあるnpxコマンドをプロジェクト直下で実行すればよしなにDependeciesを追加してくれてすぐテストかける状態になるのだが、TypeScriptの場合は少しだけ設定が必要。(tsで書いたテストをビルドして実行する分にはいらない)
詳しい設定は以下に書いている。
ava/typescript.md at master · avajs/ava · GitHub
要はpackage.json
に
{ "ava": { "compileEnhancements": false, "extensions": [ "ts" ], "require": [ "ts-node/register" ] } }
って書き足して、
yarn add -D ts-node
とかやってやりゃよいというわけ。(ってかts-nodeってあるんすね。すごい)
これでビルドしなくてもテストができる。
書いてみる
基本的にはJSと書き方は同じ。
1点だけ、ハマりそうになったのはcontext
を使う場合。
何も考えずにcontextを使おうとするとTypeErrorが出てしまう。そこで以下のようにする。(というかコレも↑の公式ドキュメントに書いてる)
import anyTest, { TestInterface } from 'ava'; import Trial from '../model/trial'; const test = anyTest as TestInterface<{trial: Trial}>
これでt.context.trial = xxxx
みたいなことができる。カンタン。
雑感とか
- 日本語のドキュメントもある。(ここ)
- ただ若干古いようなので英語版読んだ方がよさそう。いくつかないアサーションがある。
skip
とかonly
とかめっちゃ便利やんおいおいと思った。いちいちコメントアウトとかしなくていいの素敵。- 他のテスティングフレームワークにもこういうの普通あるもの?
- 当たり前なのだが、tsのenumとかを比較してるところで落ちても実際の数字がエラーに出てきてしまうのでわかりづらい。なんかよろしくやる方法ないかな。(enumに値ちゃんとつけてあげればいい話なんだよね)
雑談
てなわけで、テスト書いた。
適切なテストケースの作り方がわからない。