Files
UHD_Media_Tool/scripts/test-all.sh
T

51 lines
1.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 全量测试:逐个包跑完(不在第一个失败处停),最后汇总;连不上测试库直接失败,不让数据库用例静默跳过。
# 用法:sh scripts/test-all.sh [包目录...] 缺省跑全部 workspace 成员
# 全部包使用 Bun 运行 Vitest。
set -u
cd "$(dirname "$0")/.."
ROOT=$PWD
if [ -f .env ]; then set -a; . ./.env; set +a; fi
DB_URL=${DATABASE_URL:-postgres://umt:umt@localhost:55433/umt}
if [ "${UMT_SKIP_DB_TESTS:-}" != "1" ]; then
if ! DATABASE_URL="$DB_URL" bun -e "
import pg from 'pg';
const c = new pg.Client({ connectionString: process.env.DATABASE_URL, connectionTimeoutMillis: 3000 });
await c.connect(); await c.end();" >/dev/null 2>&1; then
echo "✗ 连不上测试库($DB_URL)。先 bun run dev:up;确实不跑数据库用例时设 UMT_SKIP_DB_TESTS=1" >&2
exit 2
fi
fi
members=("$@")
[ ${#members[@]} -eq 0 ] && members=(packages/runtime packages/adapters packages/agent packages/contracts packages/db packages/domain
packages/mapping packages/tasks packages/testkit apps/server apps/web)
LOG_DIR=${TEST_LOG_DIR:-$ROOT/.local/test-logs}
mkdir -p "$LOG_DIR"
failed=()
summary=()
for m in "${members[@]}"; do
log="$LOG_DIR/$(echo "$m" | tr / -).log"
printf '▶ %-20s ' "$m"
(cd "$m" && bun --bun "$ROOT/node_modules/vitest/vitest.mjs" run) >"$log" 2>&1
code=$?
line=$(sed 's/\x1b\[[0-9;]*m//g' "$log" | grep -E '^\s+Tests ' | tail -1 | tr -s ' ')
if [ $code -eq 0 ]; then echo "✓ ${line:-}"; else echo "✗ ${line:-退出码 $code}"; failed+=("$m"); fi
summary+=("$m:${line:-exit $code}")
done
echo
if [ ${#failed[@]} -eq 0 ]; then
echo "全部通过(日志 $LOG_DIR)"
else
echo "失败:${failed[*]}"
for m in "${failed[@]}"; do
echo "── $m"
sed 's/\x1b\[[0-9;]*m//g' "$LOG_DIR/$(echo "$m" | tr / -).log" | grep -E '(FAIL|×) ' | head -10
done
exit 1
fi