at backyard

Color my life with the chaos of trouble.

Denoのtestでネストしたテストを書く方法

目次

Denoのtestでネストしたテストを書く方法

Denoのテストでネストしたテストを書く方法は下記のようになる。

Deno.test("nest test sample", async (t) => {
  await t.step("nest test", () => {
    // test is here
  });
});

このようにDeno.testの中に t.step を書くことでネストしたテストを書くことが可能。

なお、現在(2021/12/19時点)はまだ安定化していないため、実行には下記のように --unstable フラグを付ける必要がある。

deno test --unstable

--unstableをつけないで実行した場合(Deno v1.17)

ちなみにこの --unstable フラグを付けないで実行した場合、下記のようなエラーが出る(V1.17で検証)

error: TS2339 [ERROR]: Property 'step' does not exist on type 'TestContext'.

t.stepにはawaitをつける必要がある

なお、t.stepには await をつけて実行する必要がある。

例えば下記のように asyncawait をつけない場合はエラーになる。

Deno.test("nest test sample", (t) => {
  t.step("nest test", () => {
    // test is here
  });
});

エラー内容は下記のようになる。

Error: There were still test steps running after the current scope finished execution. Ensure all steps are awaited (ex. `await t.step(...)`).

1.17よりネストしたテストに関する情報がより充実した模様

先日Denoの 1.17 がリリースされたが、このリリースによりネストしたテストのレポートが以前より充実したものになった。
(本当は1.16との比較も残そうと考えたが、そう考えたときには既に deno upgrade コマンドを叩いてしまっていた。ただ、こちらのポストによると 1.16.2 の時点ですでに入っていたものであるという情報あり。)

Deno 1.18よりネストしたテストを行う際の --unstable フラグが不要になりそう

また、Denoの 1.18 ではこのテストステップAPIは安定化されるとのことで、以降は --unstable フラグは不要になるものと思われる。

詳細は下記のリリースノートに記載。

deno.com

該当箇所はこちら(上記ドキュメント内から引用)
(ネストしたテストのレポート充実化についてもここの文章で触れられている)

Another update is for users using unstable test steps API. The final test report output will now include number of test steps with distinction for passed/ignored/failed steps. The test step API is scheduled to be stabilized in v1.18

個人的にはテストはネストして書きたいので安定化されるのは嬉しい。

追記:Denoの1.18がリリースされ、test steps APIが安定化されました

1.18がリリースされ、test steps APIが安定化された。

1.18以降は実行時に --unstable は不要となります。
詳細はリリースノートにて。

https://deno.com/blog/v1.18#stabilization-of-test-steps-api

日本語でのDeno1.17リリース内容まとめ(余談)

ちょっと本題からそれるが、上にも少し書いたとおり先日(2021/12/17)Denoの 1.17 がリリースされた。
1.17 によるリリース内容を日本語でまとめてくださっている下記のポストが分かりやすいので、こちらのブログでもリンクを貼らせていただく。

zenn.dev