denoには組み込みのテストランナーが備わっています。テストランナーはdeno test
コマンドで利用できますが、いくつかのオプションを指定することができます。その中から便利そうなものをピックアップして紹介します。
deno test
で付けたほうがよさそうなオプション
deno test --parallel
--parallel
オプションを指定すると、複数のCPUを使ってテストを並列実行します。
> deno test --parallel # CPUの個数分並列実行する
> deno test # --parallelオプションが指定されていない場合は並列実行しない
デフォルトでは、CPUの個数分だけ並列に実行されます。この数は環境変数DENO_JOBS
に数値を指定することで変更できます。
--parallel
オプションを指定しない場合、並列実行されないので注意しましょう。
筆者の場合は、--parallel
オプションを指定することで、1分半かかっていたCIを45秒に短縮することができました。
かつては--jobs
というフラグ名でしたが、v1.24からフラグ名が--parallel
に変更されました。
deno test --shuffle=<NUMBER>
--shuffle
オプションを指定すると、テストの実行順をシャッフルできます。
実行順序に依存しているテストを見つけ出し、バグの発見に繋がります。
オプションの引数は0以上1以下の整数で、シャッフルに使うランラムシードを指定できるようです。
> deno test --shuffle # テストの実行順序がシャッフルされる
> deno test # デフォルトではシャッフルされない
deno test
の便利なオプション
付けるべき、までは行かないものの、あると便利なオプションを紹介します。
deno test --watch
ソースコードの変更を監視して、変更があった場合にテストを再実行します。
このオプションの便利な所は、変更があったファイルに依存するテストのみ再実行してくれるところです。
> deno test --watch # ソースコードの変更を監視
deno test --doc
JSDocのコードブロックを型チェックします。
将来的にはテストが実行されるようになるそうですが、今のところ型チェックだけです。
/**
* # ↓この部分の型チェックが実行される
* ```ts
* import { add } from "./code.ts";
* add(2, 3)
* ```
*/
export function foo(a: number, b: number): number {
return a + b;
}
> deno test --doc
deno test --import-map <FILE>
import mapを使うと、import文を書き換えて依存関係にモンキーパッチを当てることが可能です。
{
"imports": {
"https://example.com/": "./example_com/"
}
}
// 実行時にimport mapを指定すると、example_com/foo からimportしているかのように振る舞う
import {} from "https://example.com/foo";
deno test --import-map import_map.json
テストに限らず、deno run
で実行する時にもimport mapを使用できます。
deno test --fail-fast=<N>
このオプションを指定すると、テストが1つでも失敗した場合は、他のテストを実行することなく即座に終了します。
deno test --inspect
Chromeなどの開発者ツール(デバッガ)に接続することができます。
deno run
コマンドやdeno repl
コマンドでも使用できます。
deno test --no-run
--no-run
オプションを指定すると、テストを実行せずに型チェックだけを行います。
deno cache
コマンドでも同じ効果があります。
deno test --no-check=<NO_CHECK_TYPE>
TypeScriptファイルの型チェックを行わないオプションです。
--no-check=remote
を指定すると、リモート依存関係の型チェックを行わずにローカルファイルのみ型チェックします。
> deno test --no-check # 型チェックしない
> deno test --no-check=remote # ローカルファイルのみ型チェック
--no-check=remote
は、外部ライブラリだけから型エラーが出ている時などに重宝しそうです。
deno test --filter <filter>
実行するテスト名をフィルタリングします。
指定したテスト名に一致したテストだけ実行されます。
deno test --coverage=<DIR>
deno coverage
コマンドと合わせて、カバレッジを出力することができます。
まとめ
deno test
コマンドに指定できるオプションについて紹介しました。せっかく高機能なテストランナーが組み込まれているので、活用していきたいところです。
この記事で紹介した情報は、deno test --help
コマンドから参照することができます。