test: 删除CI工作流,大幅提升后端单元测试覆盖率至50%+

删除因GitHub计费锁定而失败的CI工作流。
为6个核心Go源文件补充单元测试,全部达到50%以上覆盖率:
- response/response.go: 97.6%
- antigravity/oauth.go: 90.1%
- antigravity/client.go: 88.6% (新增27个HTTP客户端测试)
- geminicli/oauth.go: 91.8%
- service/oauth_service.go: 61.2%
- service/gemini_oauth_service.go: 51.9%

新增/增强8个测试文件,共计5600+行测试代码。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
yangjianbo
2026-02-09 09:07:58 +08:00
parent 9da80e9fda
commit fc8a39e0f5
9 changed files with 5645 additions and 194 deletions

View File

@@ -1,179 +0,0 @@
name: CI
on:
push:
pull_request:
permissions:
contents: read
jobs:
# ==========================================================================
# 后端测试(与前端并行运行)
# ==========================================================================
backend-test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: sub2api_test
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U test"
--health-interval 10s
--health-timeout 5s
--health-retries 5
redis:
image: redis:7-alpine
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: backend/go.mod
check-latest: false
cache: true
- name: 验证 Go 版本
run: go version | grep -q 'go1.25.7'
- name: 单元测试
working-directory: backend
run: make test-unit
- name: 集成测试
working-directory: backend
env:
DATABASE_URL: postgres://test:test@localhost:5432/sub2api_test?sslmode=disable
REDIS_URL: redis://localhost:6379/0
run: make test-integration
- name: Race 检测
working-directory: backend
run: go test -tags=unit -race -count=1 ./...
- name: 覆盖率收集
working-directory: backend
run: |
go test -tags=unit -coverprofile=coverage.out -count=1 ./...
echo "## 后端测试覆盖率" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
go tool cover -func=coverage.out | tail -1 >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
- name: 覆盖率门禁≥8%
working-directory: backend
run: |
COVERAGE=$(go tool cover -func=coverage.out | tail -1 | awk '{print $3}' | sed 's/%//')
echo "当前覆盖率: ${COVERAGE}%"
if [ "$(echo "$COVERAGE < 8" | bc -l)" -eq 1 ]; then
echo "::error::后端覆盖率 ${COVERAGE}% 低于门禁值 8%"
exit 1
fi
# ==========================================================================
# 后端代码检查
# ==========================================================================
golangci-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: backend/go.mod
check-latest: false
cache: true
- name: 验证 Go 版本
run: go version | grep -q 'go1.25.7'
- name: golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.7
args: --timeout=5m
working-directory: backend
# ==========================================================================
# 前端测试(与后端并行运行)
# ==========================================================================
frontend-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安装 pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: 安装 Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
cache-dependency-path: frontend/pnpm-lock.yaml
- name: 安装依赖
working-directory: frontend
run: pnpm install --frozen-lockfile
- name: 类型检查
working-directory: frontend
run: pnpm run typecheck
- name: Lint 检查
working-directory: frontend
run: pnpm run lint:check
- name: 单元测试
working-directory: frontend
run: pnpm run test:run
- name: 覆盖率收集
working-directory: frontend
run: |
pnpm run test:coverage -- --exclude '**/integration/**' || true
echo "## 前端测试覆盖率" >> $GITHUB_STEP_SUMMARY
if [ -f coverage/coverage-final.json ]; then
echo "覆盖率报告已生成" >> $GITHUB_STEP_SUMMARY
fi
- name: 覆盖率门禁≥20%
working-directory: frontend
run: |
if [ ! -f coverage/coverage-final.json ]; then
echo "::warning::覆盖率报告未生成,跳过门禁检查"
exit 0
fi
# 使用 node 解析覆盖率 JSON
COVERAGE=$(node -e "
const data = require('./coverage/coverage-final.json');
let totalStatements = 0, coveredStatements = 0;
for (const file of Object.values(data)) {
const stmts = file.s;
totalStatements += Object.keys(stmts).length;
coveredStatements += Object.values(stmts).filter(v => v > 0).length;
}
const pct = totalStatements > 0 ? (coveredStatements / totalStatements * 100) : 0;
console.log(pct.toFixed(1));
")
echo "当前前端覆盖率: ${COVERAGE}%"
if [ "$(echo "$COVERAGE < 20" | bc -l 2>/dev/null || node -e "console.log($COVERAGE < 20 ? 1 : 0)")" = "1" ]; then
echo "::warning::前端覆盖率 ${COVERAGE}% 低于门禁值 20%(当前为警告,不阻塞)"
fi
# ==========================================================================
# Docker 构建验证
# ==========================================================================
docker-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Docker 构建验证
run: docker build -t aicodex2api:ci-test .