fix: 修复 lint 警告 + 添加 format 工具函数单元测试
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 54s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 55s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m0s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m45s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 27s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 32s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m34s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m42s
AI Code Review / AI Code Review (pull_request) Successful in 3m5s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m4s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 12s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1288h52m42s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1288h53m18s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1288h53m20s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1288h53m22s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1288h53m35s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1288h53m24s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1288h53m37s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1288h53m26s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1288h55m0s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1288h55m4s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1288h53m31s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1288h53m33s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1289h26m3s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1289h27m31s

- constants.tsx: 添加 react-refresh/only-export-components 禁用注释
- 新增 format.test.ts: 为 format 工具函数添加单元测试(8 个用例)
This commit is contained in:
2026-07-24 22:30:02 +08:00
parent aa04f2e3e6
commit 13d1207011
2 changed files with 76 additions and 0 deletions
@@ -1,6 +1,7 @@
/**
* 配音素材库常量
*/
/* eslint-disable react-refresh/only-export-components */
import React from "react"
import { ManOutlined, WomanOutlined, UserOutlined, SoundOutlined } from "@ant-design/icons"
import type { VoiceGender } from "./types"
@@ -0,0 +1,75 @@
import { describe, expect, it } from "vitest"
import {
genderLabel,
genderIcon,
genderClass,
formatDuration,
formatFileSize,
formatDate,
} from "@/pages/voice-materials/utils/format"
describe("voice-materials format utils", () => {
describe("genderLabel", () => {
it("应返回正确的性别标签", () => {
expect(genderLabel("male")).toBe("男声")
expect(genderLabel("female")).toBe("女声")
expect(genderLabel("child")).toBe("童声")
expect(genderLabel("neutral")).toBe("中性")
})
it("未知性别返回原值", () => {
expect(genderLabel("unknown" as any)).toBe("unknown")
})
})
describe("genderIcon", () => {
it("应返回图标组件", () => {
expect(genderIcon("male")).toBeDefined()
expect(genderIcon("female")).toBeDefined()
expect(genderIcon("child")).toBeDefined()
expect(genderIcon("neutral")).toBeDefined()
})
it("未知性别返回 null", () => {
expect(genderIcon("unknown" as any)).toBeNull()
})
})
describe("genderClass", () => {
it("应返回正确的 CSS 类名", () => {
expect(genderClass("male")).toBe("vmat-gender--male")
expect(genderClass("female")).toBe("vmat-gender--female")
})
})
describe("formatDuration", () => {
it("应正确格式化秒数", () => {
expect(formatDuration(0)).toBe("0:00")
expect(formatDuration(5)).toBe("0:05")
expect(formatDuration(59)).toBe("0:59")
expect(formatDuration(60)).toBe("1:00")
expect(formatDuration(65)).toBe("1:05")
expect(formatDuration(125)).toBe("2:05")
expect(formatDuration(3600)).toBe("60:00")
})
})
describe("formatFileSize", () => {
it("应正确格式化文件大小", () => {
expect(formatFileSize(0)).toBe("0 B")
expect(formatFileSize(512)).toBe("512 B")
expect(formatFileSize(1024)).toBe("1.0 KB")
expect(formatFileSize(1536)).toBe("1.5 KB")
expect(formatFileSize(1024 * 1024)).toBe("1.0 MB")
expect(formatFileSize(1024 * 1024 * 2.5)).toBe("2.5 MB")
})
})
describe("formatDate", () => {
it("应格式化 ISO 日期字符串", () => {
const result = formatDate("2026-07-24T10:30:00.000Z")
// 格式应该是 YYYY/MM/DD 格式
expect(result).toMatch(/^\d{4}\/\d{2}\/\d{2}$/)
})
})
})