style: format navigation.test.ts with prettier
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Validate - Style (pull_request) Waiting to run
CI/CD Pipeline / Validate - Security (pull_request) Waiting to run
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Waiting to run
CI/CD Pipeline / Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / Integration Tests (pull_request) Waiting to run
CI/CD Pipeline / Frontend Lint (pull_request) Waiting to run
CI/CD Pipeline / Frontend Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / PR Build API Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Web Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging API Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Web Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging E2E Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging API Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Production (pull_request) Blocked by required conditions
CI/CD Pipeline / Production Browser E2E (pull_request) Blocked by required conditions
CI/CD Pipeline / ACR Image Cleanup (pull_request) Blocked by required conditions
CI/CD Pipeline / Canary Release to Production (pull_request) Blocked by required conditions
CI/CD Pipeline / CI Gate (pull_request) Blocked by required conditions
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled

This commit is contained in:
2026-09-14 21:20:11 +08:00
parent 6451165e0e
commit 81fd9eceb3
+51 -52
View File
@@ -1,80 +1,79 @@
/**
* navigation config 测试
*/
import { describe, it, expect } from "vitest"
import { NAV_ITEMS, NAV_GROUPS } from "@/config/navigation"
import { describe, it, expect } from "vitest";
import { NAV_ITEMS, NAV_GROUPS } from "@/config/navigation";
describe("navigation config", () => {
describe("NAV_ITEMS", () => {
it("应该是一个非空数组", () => {
expect(Array.isArray(NAV_ITEMS)).toBe(true)
expect(NAV_ITEMS.length).toBeGreaterThan(0)
})
expect(Array.isArray(NAV_ITEMS)).toBe(true);
expect(NAV_ITEMS.length).toBeGreaterThan(0);
});
it("每个导航项都有必需字段", () => {
NAV_ITEMS.forEach((item) => {
expect(item).toHaveProperty("key")
expect(item).toHaveProperty("label")
expect(item).toHaveProperty("path")
expect(item).toHaveProperty("icon")
expect(typeof item.key).toBe("string")
expect(typeof item.label).toBe("string")
expect(typeof item.path).toBe("string")
expect(item.path).toMatch(/^\/app/)
})
})
expect(item).toHaveProperty("key");
expect(item).toHaveProperty("label");
expect(item).toHaveProperty("path");
expect(item).toHaveProperty("icon");
expect(typeof item.key).toBe("string");
expect(typeof item.label).toBe("string");
expect(typeof item.path).toBe("string");
expect(item.path).toMatch(/^\/app/);
});
});
it("key 不重复", () => {
const keys = NAV_ITEMS.map((item) => item.key)
expect(new Set(keys).size).toBe(keys.length)
})
const keys = NAV_ITEMS.map((item) => item.key);
expect(new Set(keys).size).toBe(keys.length);
});
it("path 不重复", () => {
const paths = NAV_ITEMS.map((item) => item.path)
expect(new Set(paths).size).toBe(paths.length)
})
const paths = NAV_ITEMS.map((item) => item.path);
expect(new Set(paths).size).toBe(paths.length);
});
it("包含核心导航项", () => {
const keys = NAV_ITEMS.map((item) => item.key)
expect(keys).toContain("dashboard")
expect(keys).toContain("assets")
expect(keys).toContain("voices")
expect(keys).toContain("titles")
})
})
const keys = NAV_ITEMS.map((item) => item.key);
expect(keys).toContain("dashboard");
expect(keys).toContain("assets");
expect(keys).toContain("voices");
expect(keys).toContain("titles");
});
});
describe("NAV_GROUPS", () => {
it("应该是一个非空数组", () => {
expect(Array.isArray(NAV_GROUPS)).toBe(true)
expect(NAV_GROUPS.length).toBeGreaterThan(0)
})
expect(Array.isArray(NAV_GROUPS)).toBe(true);
expect(NAV_GROUPS.length).toBeGreaterThan(0);
});
it("每个分组都有 title 和 items", () => {
NAV_GROUPS.forEach((group) => {
expect(group).toHaveProperty("title")
expect(group).toHaveProperty("items")
expect(typeof group.title).toBe("string")
expect(Array.isArray(group.items)).toBe(true)
expect(group.items.length).toBeGreaterThan(0)
})
})
expect(group).toHaveProperty("title");
expect(group).toHaveProperty("items");
expect(typeof group.title).toBe("string");
expect(Array.isArray(group.items)).toBe(true);
expect(group.items.length).toBeGreaterThan(0);
});
});
it("分组中的每个导航项结构正确", () => {
NAV_GROUPS.forEach((group) => {
group.items.forEach((item) => {
expect(item).toHaveProperty("key")
expect(item).toHaveProperty("label")
expect(item).toHaveProperty("path")
expect(item).toHaveProperty("icon")
expect(item.path).toMatch(/^\/app/)
})
})
})
expect(item).toHaveProperty("key");
expect(item).toHaveProperty("label");
expect(item).toHaveProperty("path");
expect(item).toHaveProperty("icon");
expect(item.path).toMatch(/^\/app/);
});
});
});
it("分组标题不重复", () => {
const titles = NAV_GROUPS.map((g) => g.title)
expect(new Set(titles).size).toBe(titles.length)
})
})
})
const titles = NAV_GROUPS.map((g) => g.title);
expect(new Set(titles).size).toBe(titles.length);
});
});
});