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
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:
@@ -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}$/)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user