Deno@v0.33.0から変わったdeno testについて
Denoのv0.33.0がリリースされましたkeroxp.icon2020/2/14 このリリースで結構大きな変更があったのでメモしておきます
deno testがrust化
denoにはもともとdeno testというgo testインスパイアなコマンドがある
これは長らくサブコマンドにも関わらずリモートのstd/testing/mod.tsに依存していた
denoはシングルバイナリを貫いているので、リリースにstdのコードを入れることは出来ない
deno testは実行時にリモートのstdのコードを実行するようになっていた
しかしこれだとサブコマンドのコードにstdのバージョンが入ったURLを入れる必要がある
しかしURLをベタ書きすると、最新のリリースでは最新のstdのコードを参照できないという問題があった
v0.33.0としてリリースされるコミットにstd@v0.33.0を入れると、リリース前に実行されるCIが落ちてしまう……など
で、最近サブコマンドとして実行されるものはすべてrust化しようという流れになった
stdに依存していた、install fmt が順次Rust化され、最終的にtestもRust化された
install fmtは実装が完全にRustに置き換えられた一方、testはstd/testingにあったテストランナーがコアに昇格し、Deno.test()というAPIが増えた
結果std/testing/mod.tsという結構昔からあって、テストファイルなら必ずimportしてたファイルが消えた
deno testの仕様が大幅に変更
v0.33.0から、deno testは実行するテストのファイルを引数に取るように変更されました
code:bash
deno test -A
これが落ちる。ていうかバグじゃねこれ……
deno test -hにはこう書いてあるんですけどね…
Searches the specified directories for all files that end in _test.ts or
_test.js and executes them.
deno test src/
まーよくあることだkeroxp.icon
やはり直し中らしい。v0.34.0に入るか?
こうかけば動く
code:bash
$ deno test -A hoge_test.ts
もしくはこう
code:bash
$ deno test -A **/*_test.ts
testの書き方、実行方法の変化
code:hoge_test.ts
Deno.test("test", () => {
// ここにテストコードを書く
});
Denoにtestが生えた。これは以前のtestと同じ仕様。
runTests,runIfMainは?
testing/mod.tsにあったテストを実行する系の関数
runTestsはテストを実行する関数
正確に言うと呼び出された時点でtestの引数として登録された関数を全部呼ぶ
runIfMainはmainとして実行されたらtestを実行する
これらもなくなった
代わりにDeno.runTests()を使うこともできる
が、deno testが引数受け取れるようになったのでそれで十分な気もする
実質的にrunIfMainを実行することになるので
memo
うーんなんかあんまり良い変更には思えない
goのテストランナーを模して作られたdeno testだが、機能不足なものをコアに入れてしまって良いのかと疑問
goのテストランナーは意外と高機能だし…
とりあえず deno test .を動かせるようにしないといけないと思う