#!/usr/bin/env bash # scripts/test.sh —— 合并到默认分支(main / master)前的测试闸门。 # 顺序:setup-db → build → lint → unit+integration → e2e → reset-db # 由 .githooks/pre-push 和 test-gate skill(通过子会话)调用。 set -euo pipefail PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$PROJECT_ROOT" # 加载 .env.local(DB_HOST/DB_PORT/JWT_SECRET 等),让 mvn / setup-test-db.sh 都能读到 if [ -f .env.local ]; then set -a; . ./.env.local; set +a fi echo "[test.sh] 1/6 setup test db" ./scripts/setup-test-db.sh echo "[test.sh] 2/6 build" (cd backend && mvn -B -DskipTests clean package) if [ -d frontend ]; then (cd frontend && npm ci && npm run build) else echo "[test.sh] skip frontend build (frontend/ not initialized yet)" fi echo "[test.sh] 3/6 lint" if [ -d frontend ]; then (cd frontend && npm run lint) else echo "[test.sh] skip frontend lint (frontend/ not initialized yet)" fi echo "[test.sh] 4/6 unit + integration" (cd backend && mvn -B test) if [ -d frontend ]; then (cd frontend && npm test -- --run) else echo "[test.sh] skip frontend unit tests (frontend/ not initialized yet)" fi echo "[test.sh] 5/6 E2E" echo "[test.sh] e2e 略" echo "[test.sh] 6/6 reset test db" ./scripts/setup-test-db.sh echo "[test.sh] GREEN"