deno test --docでREADME.mdをうまくテストする
はじめに
Deno v1.13からdeno test --docコマンドでMarkdownファイルがサポートされました。
この機能を利用することで、README.mdなどに記述したサンプルコードの型チェックをすることができます。
そのため、Denoモジュールをdeno.land/xやnest.landなどに公開する場合、サンプルコードが正しく動作することを保証するのにとても役立ちます。
問題
README.mdなどにサンプルコードを記述する際は、以下のようにimport節にはdeno.land/xの公開URLを記述することが一般的だと思います。
例)
## Usage
```ts
import { connect } from "https://deno.land/x/redis/mod.ts";
const redis = await connect({ hostname: "127.0.0.1" });
await redis.set("foo", "bar");
const value = await redis.get("foo");
console.assert(typeof value === "string");
await redis.del("foo");
```
この場合、モジュールはhttps://deno.land/x/redis/mod.tsから読み込まれてしまうため、CIなどで最新状態のソースに対してテストができない問題があります。
解決策
この問題はImport mapsを使用することで解決できます。
以下のようにimport_map.test.jsonを用意します。
{
"imports": {
"https://deno.land/x/redis/mod.ts": "./mod.ts"
}
}
そして、deno test --docコマンドを実行する際に--import-mapオプションでこのファイルを指定します。
$ deno test --doc --no-run --import-map=import_map.test.json README.md
こうすることで、https://deno.land/x/redis/mod.tsが./mod.tsの読み込みに置き換えられるため、ローカルの最新状態のmod.tsに対してテストすることができます。
参考
環境
- Deno v1.13.1