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