test: fix TtsPanel test teardown race condition
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m9s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m16s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 2m57s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 4m1s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m1s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 6m16s
CI/CD Pipeline / Build Staging API Image (push) Successful in 6m56s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 55s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 42s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 48s
CI/CD Pipeline / Integration Tests (push) Successful in 3m27s
CI/CD Pipeline / Unit Tests (push) Successful in 9m47s
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 2m52s
CI/CD Pipeline / Canary Release to Production (push) Has been skipped

用 act() 包裹 render 和 cleanup,避免 React 并发渲染在 jsdom
环境销毁后触发 window is not defined 错误。
This commit is contained in:
CI Bot
2026-08-11 14:38:13 +08:00
parent d6f0eef929
commit 796bbbc8ab
@@ -1,5 +1,5 @@
import { afterEach, describe, expect, it, vi } from "vitest"
import { render, cleanup } from "@testing-library/react"
import { render, cleanup, act } from "@testing-library/react"
import TtsPanel from "@/pages/editing-planner/components/TtsPanel"
import { DEFAULT_TTS_CONFIG } from "@/pages/editing-planner/types"
@@ -16,17 +16,28 @@ const defaultProps = {
}
describe("TtsPanel", () => {
afterEach(() => {
afterEach(async () => {
// Flush pending React updates before cleanup to avoid
// "window is not defined" errors after jsdom teardown
await act(async () => {})
cleanup()
})
it("should render without crashing", () => {
const { container } = render(<TtsPanel {...defaultProps} />)
expect(container).toBeTruthy()
it("should render without crashing", async () => {
let container: HTMLElement
await act(async () => {
const result = render(<TtsPanel {...defaultProps} />)
container = result.container
})
expect(container!).toBeTruthy()
})
it("should render when closed", () => {
const { container } = render(<TtsPanel {...defaultProps} open={false} />)
expect(container).toBeTruthy()
it("should render when closed", async () => {
let container: HTMLElement
await act(async () => {
const result = render(<TtsPanel {...defaultProps} open={false} />)
container = result.container
})
expect(container!).toBeTruthy()
})
})