导出-每次考试/多考试对比: - 合格次数阈值等标记项抽为常显区块,三类成绩表共用 - 附缺考名单扩展到多考试导出(取所选考试全都没交的人) - 块表每场固定2列(成绩+合并空位),修复漏推空串导致的整行左移/串列 - 列宽按实际内容估算,合并区空位只给最小宽度 - 合格次数始终显示实际次数(含0),仅 ≥ 阈值标绿底 - 打印标题改为「成绩明细」,缺考名单分页单独成页 - 打印样式加 print-color-adjust:exact,绿底/红字可正常印出 数据大屏: - ?class= 班级大屏免登录公开访问,接口侧放行并按班级裁剪后回传 - 单班大屏移除退出按钮,仅首页保留 - 修复红绿判定真bug:membersTable 误用 window.DASH(DASH为let声明取不到) 改为 scoreGrade() 直接读自由变量,按后台合格率正确判红/黄/绿 测试/样例/文档同步更新,全量回归通过。
62 lines
2.9 KiB
Bash
62 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
||
# 一键跑完所有回归测试(PHP 单元自测 + Node e2e)。
|
||
# 用法:bash tests/run-all.sh
|
||
set -e
|
||
cd "$(dirname "$0")/.."
|
||
|
||
# 运行期路径:优先用环境变量,其次用本机工作区路径,最后退回 PATH 里的 php / node
|
||
# (工作区 node 的版本目录会随升级变化,写死路径会直接 No such file or directory)
|
||
pick() {
|
||
local cand="$1" fallback="$2"
|
||
if [ -n "$cand" ] && [ -x "$cand" ]; then echo "$cand"; return; fi
|
||
command -v "$fallback" 2>/dev/null || echo "$fallback"
|
||
}
|
||
# 本项目用 PHP 7.4+ 语法(箭头函数 / 类型化属性),必须是 PHP 8;
|
||
# 工作区里已备好便携版 8.2.34(其 php.ini 已开启 pdo_sqlite / zip / mbstring),
|
||
# 想换别的解释器就设 PHP_BIN=... 覆盖
|
||
PHP="$(pick "${PHP_BIN:-C:/Users/Zhang/.workbuddy/binaries/php/8.2.34/php.exe}" php)"
|
||
NODE="$(pick "${NODE_BIN:-}" node)"
|
||
INI="${PHP_INI:-}"
|
||
echo "PHP = $PHP"
|
||
echo "NODE = $NODE"
|
||
|
||
echo "================ PHP 自测 ================"
|
||
for f in tests/test-aggregate.php tests/test-new-features.php tests/test-config-persist.php tools/test-xlsxwriter.php tests/test-multi-export.php; do
|
||
echo ""
|
||
echo ">>> $f"
|
||
"$PHP" $INI "$f"
|
||
done
|
||
|
||
echo ""
|
||
echo "================ Node e2e(需 mock-server + PHP 内置服务器) ================"
|
||
# e2e 会把 mock 连接配置写进数据目录;用 NY_DATA 把这两个会改写配置的测试整体指向临时目录,
|
||
# 彻底避免污染生产 data/ny.db(曾因此把登录页连接信息写成 127.0.0.1)。
|
||
NY_DATA_TMP="$(pwd)/.ny-test-data"
|
||
mkdir -p "$NY_DATA_TMP"
|
||
# 说明:test-login-loop.js 会清空数据目录里的账密来复现"未配置账号"现场,
|
||
# 即使不传 NY_DATA 它也会自己建临时目录,绝不回退到项目 data/。
|
||
# 这几段依赖 mock-server(dashboard-nav 自带名单,另 4 段需本机 data/roster.json)。
|
||
# 逐段容错,避免一个坏掉的环境把后面的测试整段带走;失败照常记账,末尾统一汇总退出码。
|
||
e2e_fail=0
|
||
for f in tools/test-config-save.js tools/test-upload-guard.js tools/test-whitelist.js tools/test-login-loop.js tools/test-dashboard-nav.js; do
|
||
echo ""
|
||
echo ">>> $f (NY_DATA=$NY_DATA_TMP)"
|
||
if ! NY_DATA="$NY_DATA_TMP" "$NODE" "$f"; then e2e_fail=$((e2e_fail + 1)); fi
|
||
done
|
||
# test-draw-alloc.js 不读写连接配置,沿用项目 data/ 即可
|
||
echo ""
|
||
echo ">>> tools/test-draw-alloc.js"
|
||
"$NODE" "tools/test-draw-alloc.js" || e2e_fail=$((e2e_fail + 1))
|
||
|
||
# 多考试打印渲染(纯前端函数,不需要服务器):从 app.js 抽取 sheetToHtml 校验合并单元格换算
|
||
echo ""
|
||
echo ">>> tools/test-block-print.js"
|
||
"$NODE" "tools/test-block-print.js" || e2e_fail=$((e2e_fail + 1))
|
||
|
||
echo ""
|
||
if [ "$e2e_fail" -gt 0 ]; then
|
||
echo "全部测试跑完,但有 $e2e_fail 个 Node 段失败(多为 mock-server 缺 data/roster.json 导致的环境问题)"
|
||
exit 1
|
||
fi
|
||
echo "全部测试完成。"
|