Bunにおけるテスト

Trailの開発で初めてBunの機能を使ったテストを書く。

Trailの記事階層を区別するため、pathからオブジェクトを生成して返す関数を作る。

Bunの型を認識できなかったため、手動で追加する。

$bun add -d @types/bun

次にmodule.test.tsを書く。

import { expect, mock, test } from "bun:test"

mock.module("astro:content",()=>({
    getCollection: async () => [{
    data:{
        draft:false,
        tags: ["Astro"],
        pubDate: new Date("2026-01-01")
    }}]
}))

test("getPost Func",async ()=>{
    const { getPosts } = await import("./post-query");
    const posts = await getPosts();

    expect(posts).toHaveLength(1);
})

処理の流れ: astro:contentのmockを作る。

mockはテスト用の偽データ。 返すデータの型によって扱いは異なる。

post-query.tsからgetPosts関数を読み込む。 postsにgetPostsの結果を入れ、expect(posts)で要素数1を確認する。

$bun test src/utils/post-query.test.ts

テストを実行する。

bun test v1.3.13 (bf2e2cec)

src/utils/post-query.test.ts:
✓ getPost Func [0.82ms]

 1 pass
 0 fail
 1 expect() calls
Ran 1 test across 1 file. [14.00ms]

テスト結果はこのように表示される。 テストの実行結果も確認できた。

今回はmodule mockを使った。