JavaScript でテストを書く時のライブラリについて調べた
1年半前は 業務 とか 趣味 で TypeScript を使ってテストも書いてたんだけど、最近は iOS ばかりで忘れてしまっていた。
けどまた仕事で同じような環境を作ったので、テストを書くときにどういう Framework があって役割は何かをメモっておく。
テストフレームワーク
テストを書くために必要なライブラリ。
iOS でいったら Quick や XCTest, Rails でいったら rspec とかが該当する。
- Mocha - the fun, simple, flexible JavaScript test framework
- BDD フレームワークで、 assertion の機能は持っていない
- Jasmine Documentation
- Matcher というアサーションライブラリを内部で持っているようだ
- Jasmine使い方メモ - Qiita
- Jest · 🃏 Delightful JavaScript Testing
- Mock することを前提としているっぽい
- All In One っぽいので余計なことを考えなくて良さそう
- TypeScript をデフォルトサポートしている
- ResctNative と相性が良さそう
- jest入門 - Mockテストと非同期テスト - Qiita
アサーションライブラリ
iOS でいうと Nimble が該当する。
XCTest や rspec には組み込みで入っている。
- Chai
- デファクトスタンダードっぽい
- assertion の種類がたくさんある
- power-assert
- assertion の種類はシンプル
- エラーが出たときのログが見やすい
- power-assert-js/espower-typescript: power-assert instrumentor for TypeScript
- typescript で power-assert を使えるようにしてくれる
mock / stub / spy
- Sinon.JS - Standalone test spies, stubs and mocks for JavaScript. Works with any unit testing framework.
- メソッドや返り値などの mock や stub などができる
sinon 以外に話題に上がっているのを見なかったので、デファクトスタンダードだと思っていいのかもしれない。
テストランナー
- Karma - Spectacular Test Runner for Javascript
- ブラウザ上でテストが動かせる
- Angular が推奨していたので昔使っていた記憶がある
- step by stepで始めるKarma - Qiita
コマンドラインでテスト実行したらブラウザが開いて〜みたいなのができるっぽい。
用途に合わせて構成を決める
自分はモックやテストランナーは不要だけど TypeScript を使っているので mocha + power-assert + espower-typescript という構成になった。
今後モックしたくなったら sinon を追加すると思う。
ReactNative とかでがっつりテスト書くなら jest は良さそうだし、ブラウザでテストをするなら Karma などが必要かもしれない。
その辺は人によって違うので各自選ばないといけない。