test(#1195): 添加useStep5Voice smoke test,确保vitest related能关联
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 41s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m3s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m6s
AI Code Review / AI Code Review (pull_request) Successful in 2m15s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m54s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m23s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 46s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 52s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1151h18m28s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1151h18m30s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1151h18m30s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 1151h18m29s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 1151h22m22s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1151h22m24s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1151h18m29s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1151h22m50s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1151h18m30s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1151h22m51s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1151h22m52s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1151h22m53s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1151h22m54s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1151h22m54s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1151h51m39s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 1151h55m31s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1151h55m59s

This commit is contained in:
2026-07-30 16:04:40 +08:00
parent c206ca04d6
commit 599f52403c
@@ -0,0 +1,97 @@
/**
* useStep5Voice Hook smoke test
* 确保 vitest related 模式能匹配到 useStep5Voice.tsx 的改动
*/
import { describe, it, expect, vi } from "vitest"
import { renderHook } from "@testing-library/react"
// mock 所有子 Hook
vi.mock("@/pages/generate/hooks/step5-voice/useVoiceAudio", () => ({
useVoiceAudio: () => ({
playingVoice: null,
toggleVoicePlay: vi.fn(),
}),
}))
vi.mock("@/pages/generate/hooks/step5-voice/useVoiceRecommend", () => ({
useVoiceRecommend: () => ({
presetVoices: [],
presetVoicesLoading: false,
voiceRecommendLoading: false,
voiceRecommendations: [],
hasVoiceRecommend: false,
handleVoiceRecommend: vi.fn(),
}),
}))
vi.mock("@/pages/generate/hooks/step5-voice/useTtsSynthesis", () => ({
useTtsSynthesis: () => ({
customVoiceText: "",
setCustomVoiceText: vi.fn(),
customAudioUrl: null,
ttsError: null,
ttsJobId: null,
completedTtsJobId: null,
synthesizeMutation: { isPending: false, mutate: vi.fn() },
handleSynthesizeVoice: vi.fn(),
resetTtsState: vi.fn(),
}),
}))
vi.mock("@/pages/generate/hooks/step5-voice/useSaveToLibrary", () => ({
useSaveToLibrary: () => ({
saveModalOpen: false,
setSaveModalOpen: vi.fn(),
saveName: "",
setSaveName: vi.fn(),
saveTagIds: [],
setSaveTagIds: vi.fn(),
saveNewTag: "",
setSaveNewTag: vi.fn(),
allTags: [],
saveToLibraryMutation: { isPending: false, mutate: vi.fn() },
handleOpenSaveModal: vi.fn(),
handleConfirmSave: vi.fn(),
handleAddTagInModal: vi.fn(),
}),
}))
vi.mock("@/pages/generate/hooks/step5-voice/useVoiceModeSelection", () => ({
useVoiceModeSelection: () => ({
handleSelectRecommendedVoice: vi.fn(),
handleSelectPresetVoice: vi.fn(),
handleSelectCloneVoice: vi.fn(),
handleSelectClonedVoice: vi.fn(),
handleOpenCloneModal: vi.fn(),
handleCloneSuccess: vi.fn(),
}),
}))
vi.mock("@/api/voice-clone", () => ({
VoiceCloneStatus: { READY: "ready", PROCESSING: "processing", FAILED: "failed" },
}))
describe("useStep5Voice smoke test", () => {
it("should import and render hook without crashing", async () => {
// 动态 import 确保 mock 生效
const { useStep5Voice } = await import("@/pages/generate/hooks/useStep5Voice")
const { result } = renderHook(() =>
useStep5Voice({
selectedVoice: "",
onSelectedVoiceChange: vi.fn(),
voiceMode: "preset",
onVoiceModeChange: vi.fn(),
selectedClonedVoice: "",
onSelectedClonedVoiceChange: vi.fn(),
clonedVoices: [],
addClone: vi.fn(),
hasProcessing: false,
cloneModalOpen: false,
onCloneModalOpenChange: vi.fn(),
titleText: "测试标题",
}),
)
expect(result.current).toBeDefined()
expect(typeof result.current.handlePlayCloneSample).toBe("function")
})
})