import "../../../tests/web/test-utils"; import { render } from "@testing-library/react"; import { beforeEach, describe, expect, test, vi } from "bun:test"; import { ErrorBoundary } from "../../../src/web/components/ErrorBoundary"; // 一个正常组件 function NormalComponent() { return
Normal content
; } // 一个会抛错的组件 function ThrowError() { throw new Error("Test error"); // TypeScript 需要返回值,虽然这里永远不会执行 return null; } describe("ErrorBoundary", () => { let consoleErrorSpy: ReturnType; beforeEach(() => { consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => { // Mock console.error to suppress error output during tests }); }); test("捕获子组件渲染错误并显示 fallback", () => { const { container } = render( , ); expect(container.firstChild).not.toBeNull(); }); test("正常渲染子组件", () => { const { container } = render( , ); expect(container.firstChild).not.toBeNull(); }); test("刷新按钮不崩溃", () => { const { container } = render( , ); expect(container.firstChild).not.toBeNull(); }); test("错误时调用 console.error", () => { render( , ); expect(consoleErrorSpy).toHaveBeenCalled(); }); });