ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

AVA + TypeScriptでイケイケテスティング

やっほー、みんな元気かい?ううたろだよ!(唐突なYouTuber感)

今日はAVAというライブラリ+TypeScriptでテストを少しだけ書いてみたから紹介するよ!

AVAとは

github.com

これ。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に値ちゃんとつけてあげればいい話なんだよね)

雑談

てなわけで、テスト書いた。

github.com

適切なテストケースの作り方がわからない。