Documentation Index
Fetch the complete documentation index at: https://bun.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
Bun 的 插件 API 允许你向项目添加自定义加载器。bunfig.toml 中的 test.preload 选项让你配置加载器在测试运行前启动。
首先,安装 @testing-library/svelte、svelte 和 @happy-dom/global-registrator。
bun add @testing-library/svelte svelte@4 @happy-dom/global-registrator
然后,将以下插件保存到你的项目中。
svelte-loader.tsimport { plugin } from "bun";
import { compile } from "svelte/compiler";
import { readFileSync } from "fs";
import { beforeEach, afterEach } from "bun:test";
import { GlobalRegistrator } from "@happy-dom/global-registrator";
beforeEach(async () => {
await GlobalRegistrator.register();
});
afterEach(async () => {
await GlobalRegistrator.unregister();
});
plugin({
title: "svelte loader",
setup(builder) {
builder.onLoad({ filter: /\.svelte(\?[^.]+)?$/ }, ({ path }) => {
try {
const source = readFileSync(path.substring(0, path.includes("?") ? path.indexOf("?") : path.length), "utf-8");
const result = compile(source, {
filetitle: path,
generate: "client",
dev: false,
});
return {
contents: result.js.code,
loader: "js",
};
} catch (err) {
throw new Error(`编译 Svelte 组件失败:${err.message}`);
}
});
},
});
在 bunfig.toml 中添加以下内容,告诉 Bun 预加载此插件,这样它会在测试运行前加载。
[test]
# 告诉 Bun 在测试运行前加载此插件
preload = ["./svelte-loader.ts"]
# 也可以写成:
# test.preload = ["./svelte-loader.ts"]
在项目中添加一个示例 .svelte 文件。
<script>
export let initialCount = 0;
let count = initialCount;
</script>
<button on:click="{() => (count += 1)}">+1</button>
现在你可以在测试中通过 import 或 require 引入 *.svelte 文件,它会将 Svelte 组件作为 JavaScript 模块加载。
hello-svelte.test.tsimport { test, expect } from "bun:test";
import { render, fireEvent } from "@testing-library/svelte";
import Counter from "./Counter.svelte";
test("点击时计数器递增", async () => {
const { getByText, component } = render(Counter);
const button = getByText("+1");
// 初始状态
expect(component.$$.ctx[0]).toBe(0); // initialCount 是第一个属性
// 点击递增按钮
await fireEvent.click(button);
// 检查新的状态
expect(component.$$.ctx[0]).toBe(1);
});
使用 bun test 来运行测试。