mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-03 15:53:56 +00:00
test(gui): 行为判据 + 接进 make test(此前无人能跑)
## 为什么加行为判据
`sse-backoff.test.mjs` 检查源码**形状**(有没有清零、上限自不自洽)。
但形状对 ≠ 行为对:把清零写到 `reader` 取流**之后**,形状检查照样通过,
而实际仍在用旧计数重连。
新判据 `sse-backoff-behavior.test.mjs` 从**真实源码**抽出退避表达式并
在 `node:vm` 沙箱里求值,用假状态记录实际等待。实测量化:
历史累计 8 次后建连成功再断流 → 等 1000ms(改前会是 32000ms)
连续 6 次「建连成功→断流」 → 1000,1000,1000,1000,1000,1000ms
## 变异测试(都抓到)
| 变异 | 形状判据 | 行为判据 |
| --- | --- | --- |
| 清零挪进 setTimeout 内 | 通过 | **红** ← 只有行为抓得到 |
| 删掉「建连后」清零 | **红** | 通过 ← 暴露了行为判据的盲区 |
| pump 上限改回 60000 | **红** | — |
| 30ms 改回 800ms | **红** | — |
第二行促成了「行为 0」:建连后清零原本不在被验证的路径上
(抽取锚点只抓 pump 那一处),补了独立检查。
## ★ 判据本身踩的坑(都写进文件注释)
1. **别包假 setTimeout**:`exprSrc` 本身就是延迟数值
(`setTimeout(fn, <延迟>)` 的第二个参数),包一层让结果恒为 null,
三项全红。
2. **别用 `new Function`**:等价于 eval,是安全反模式。改用 `node:vm`
的 `runInNewContext`(官方受限环境,拿不到宿主作用域,带 1000ms 超时)。
3. **一个正则兼容两种幂运算形态会取错捕获组**:`Math.pow(2,x)` 比 `2 ** x`
多一层括号 ⇒ 组数差 1 ⇒ `r[length-1]` 取到 NaN。
最终形态是**定位与取值分离**:正则只定位(不捕获数字),数字单独取。
4. **`String.raw` 拼接正则不可用**:`\\.` 保持字面双反斜杠(去找字面的
"\."),且拼接后捕获组编号不可控。
## ★ 这些判据此前没有任何入口会跑
`cmd/gui` 是**纯 Electron 目录**(0 个 `.go`、无 `go.mod`),Go 通配会
跳过它 ⇒ 判据挂着也没人执行。现已接入:
- `cmd/gui/package.json` 加 `"test"`
- `Makefile` 加 `test-gui` 目标,并挂进 `test`
- 无 node 时显式 SKIP 而不是静默通过
```bash
make test-gui # 或 cd cmd/gui && npm test
```
## 顺带说明
`go test ./cmd/gui` 报 `no Go files [setup failed]` **不是回归**:
该目录 0 个 `.go` 文件,只有**显式点名**才报。仓库门禁用的三种形态
(`go test ./...`、`go test ./cmd/...`、Makefile 的 `test`)全部通过。
This commit is contained in:
13
Makefile
13
Makefile
@ -1,4 +1,4 @@
|
||||
.PHONY: all build build-plain build-cli build-gui clean install test run build-static build-linux-arm64 lint fmt sync-client-versions check-client-versions csrc csrc-test csrc-lint csrc-abi csrc-headers csrc-sanitize csrc-cross csrc-fuzz check-csrc check-csrc-full
|
||||
.PHONY: test-gui all build build-plain build-cli build-gui clean install test run build-static build-linux-arm64 lint fmt sync-client-versions check-client-versions csrc csrc-test csrc-lint csrc-abi csrc-headers csrc-sanitize csrc-cross csrc-fuzz check-csrc check-csrc-full
|
||||
# HOMED_TAGS 默认带 onnxruntime:发行版**默认启用**本地向量空间(与
|
||||
# deploy/packaging/build.sh 保持一致)。
|
||||
#
|
||||
@ -118,6 +118,16 @@ csrc-test: csrc
|
||||
#
|
||||
# 用 \`-Werror\` 而不是只看输出:只有「告警即失败」才是门禁,
|
||||
# 否则它只是打印给人看,而人会累。
|
||||
# cmd/gui 的判据入口。
|
||||
#
|
||||
# 为什么单列:cmd/gui 是**纯 Electron 目录**(0 个 .go、无 go.mod),
|
||||
# `go test ./...` 会跳过它(实测 43 包全绿、0 处提及)。
|
||||
# 也就是说:不挂到这里,GUI 的判据**没有任何标准工具链会跑**。
|
||||
# `go test ./cmd/gui` 报 "no Go files [setup failed]" 属预期,不是回归。
|
||||
test-gui:
|
||||
@command -v node >/dev/null || { echo "SKIP: 无 node,GUI 判据未跑"; exit 0; }
|
||||
@cd cmd/gui && npm test --silent
|
||||
|
||||
.PHONY: csrc-lint
|
||||
csrc-lint:
|
||||
@echo "== C 告警门禁($(CSRC_STD),$(CSRC_WARN_FLAGS))=="
|
||||
@ -333,6 +343,7 @@ install: build
|
||||
|
||||
test:
|
||||
$(GO) test ./...
|
||||
@$(MAKE) test-gui
|
||||
@$(MAKE) csrc-test
|
||||
@$(MAKE) check-csrc
|
||||
@$(MAKE) check-codec-cgo-only
|
||||
|
||||
Reference in New Issue
Block a user