Skip to main content
你可以在 Bun 的测试运行器中使用 Testing Library
使用 Testing Library 的前提是你需要安装 Happy Dom。(查看 Bun 的 Happy DOM 指南获取更多信息)。
terminal
bun add -D @happy-dom/global-registrator

接下来你应当安装打算使用的 Testing Library 包。例如,如果你正在为 React 设置测试,你可以这样安装。你还需要安装 @testing-library/jest-dom,以便后续使用 matcher。
terminal
bun add -D @testing-library/react @testing-library/dom @testing-library/jest-dom

接下来你需要为 Happy DOM 和 Testing Library 创建预加载脚本。有关 Happy DOM 设置脚本的更多细节,请参阅 Bun 的 Happy DOM 指南
https://mintcdn.com/ikxin/RzFFGbzo0-4huILA/icons/typescript.svg?fit=max&auto=format&n=RzFFGbzo0-4huILA&q=85&s=a3dffd2241f05776d3bd25171d0c5a79happydom.ts
import { GlobalRegistrator } from "@happy-dom/global-registrator";

GlobalRegistrator.register();

对于 Testing Library,你需要使用 Testing Library 的 matcher 来扩展 Bun 的 expect 函数。可选地,为了更好地匹配像 Jest 这样的测试运行器的行为,你可能想在每个测试后运行清理操作。
https://mintcdn.com/ikxin/RzFFGbzo0-4huILA/icons/typescript.svg?fit=max&auto=format&n=RzFFGbzo0-4huILA&q=85&s=a3dffd2241f05776d3bd25171d0c5a79testing-library.ts
import { afterEach, expect } from "bun:test";
import { cleanup } from "@testing-library/react";
import * as matchers from "@testing-library/jest-dom/matchers";

expect.extend(matchers);

// 可选:在每个测试后清理 `render`
afterEach(() => {
  cleanup();
});

然后,将这些预加载脚本添加到你的 bunfig.toml 中(如果你愿意,也可以将所有内容放在单个 preload.ts 脚本里)。
bunfig.toml
[test]
preload = ["./happydom.ts", "./testing-library.ts"]

如果你使用 TypeScript,还需要使用声明合并来让新的 matcher 类型在编辑器中生效。为此,创建一个类型声明文件,像这样扩展 Matchers
https://mintcdn.com/ikxin/RzFFGbzo0-4huILA/icons/typescript.svg?fit=max&auto=format&n=RzFFGbzo0-4huILA&q=85&s=a3dffd2241f05776d3bd25171d0c5a79matchers.d.ts
import { TestingLibraryMatchers } from "@testing-library/jest-dom/matchers";
import { Matchers, AsymmetricMatchers } from "bun:test";

declare module "bun:test" {
  interface Matchers<T> extends TestingLibraryMatchers<typeof expect.stringContaining, T> {}
  interface AsymmetricMatchers extends TestingLibraryMatchers {}
}

现在你应该可以在测试中使用 Testing Library 了。
https://mintcdn.com/ikxin/RzFFGbzo0-4huILA/icons/typescript.svg?fit=max&auto=format&n=RzFFGbzo0-4huILA&q=85&s=a3dffd2241f05776d3bd25171d0c5a79myComponent.test.tsx
import { test, expect } from "bun:test";
import { screen, render } from "@testing-library/react";
import { MyComponent } from "./myComponent";

test("Can use Testing Library", () => {
  render(MyComponent);
  const myComponent = screen.getByTestId("my-component");
  expect(myComponent).toBeInTheDocument();
});

有关使用 Bun 编写浏览器测试的完整文档,请参阅 Testing Library 文档Happy DOM 仓库 以及 文档 > 测试运行器 > DOM