Bun

指南測試執行器

使用 Bun 和 happy-dom 編寫瀏覽器 DOM 測試

你可以使用 Bun 的測試執行器和 Happy DOM 搭配使用,來編寫和執行瀏覽器測試。Happy DOM 實作了瀏覽器 API 的模擬版本,例如 documentlocation

首先,安裝 happy-dom

bun add -d @happy-dom/global-registrator

這個模組導出一個「註冊器 (registrator)」,它會將模擬的瀏覽器 API 注入到全域作用域。

happydom.ts
import { GlobalRegistrator } from "@happy-dom/global-registrator";

GlobalRegistrator.register();

我們需要確保這個檔案在任何測試檔案之前執行。這可以使用 Bun 內建的 preload 功能來達成。在專案根目錄中建立一個 bunfig.toml 檔案 (如果還不存在),並加入以下幾行。

./happydom.ts 檔案應該包含上述的註冊程式碼。

bunfig.toml
[test]
preload = "./happydom.ts"

現在在專案中執行 bun test 將會自動先執行 happydom.ts。我們可以開始編寫使用瀏覽器 API 的測試。

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

test("set button text", () => {
  document.body.innerHTML = `<button>My button</button>`;
  const button = document.querySelector("button");
  expect(button?.innerText).toEqual("My button");
});

在正確設定 Happy DOM 之後,這個測試就能如預期地執行。

bun test

dom.test.ts:
✓ set button text [0.82ms]

 1 pass
 0 fail
 1 expect() calls
Ran 1 tests across 1 files. 1 total [125.00ms]

請參考 Happy DOM repo文件 > 測試執行器 > DOM,以取得關於使用 Bun 編寫瀏覽器測試的完整文件。