test(cli): add e2e test for nerve sense query #165
Reference in New Issue
Block a user
Delete Branch "test/156-sense-query"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
E2E test for
nerve sense query— the exact bug that motivated #153.Why
Validates the full signal persistence → query pipeline works end-to-end.
Changes
e2e-sense-query.test.ts— 4 test cases: default query, payload columns, --json output, --sql custom querysense-sqlite.ts— add--sqlflag support toparseSenseQueryArgssense-sqlite.test.ts— unit tests for--sqlparsingsense.ts— update description to mention--sqlRef
Fixes #156
Code Review — PR #165
整体评价:代码质量不错,测试覆盖合理。有几个建议。
✅ Looks Good
parseSenseQueryArgs的 --sql 优先级逻辑合理(--sql > positional)⚠️ Warnings
sense-sqlite.ts重构引入了不必要的复杂度原来的
parseSenseQueryArgs是一个简单的 for 循环,现在拆成了endIndexAfterGenericDashArg+nextSenseQueryArgStep+ 主函数三层。只是为了加一个--sqlflag,过度工程化了。可以在原循环里加两行 if 处理--sql/--sql=就行。endIndexAfterGenericDashArg命名不直观 — 函数返回的是 "跳过 flag value 后的 index",但名字暗示的是 "结束位置"。而且这个函数只在nextSenseQueryArgStep里调用一次,没必要单独提取。💡 Suggestions
e2e 测试的
waitForSignalsPersisted打开 DB 后如果 prepare/get 抛异常,db.close() 不会被调用。建议用 try/finally:nextSenseQueryArgStep的返回类型用了string | undefined和string | null混用 — flagSql 是 undefined,positionalToken 是 null。项目规范要求T | null而非 optional/undefined(CLAUDE.md: "No optional properties")。建议统一用 null。Reviewed by 团子 🐰
@@ -0,0 +39,4 @@const db = new DatabaseSync(dbPath, { readOnly: true });const row = db.prepare("SELECT COUNT(*) as cnt FROM _signals").get() as| { cnt: number }| undefined;💡 这里 db.close() 如果 prepare/get 抛异常就不会执行。建议 try/finally 包一下。虽然是测试代码且外层 catch 了,但 DB handle 泄漏在反复 poll 时可能累积。
⚠️ 这个三层拆分(endIndexAfterGenericDashArg → nextSenseQueryArgStep → parseSenseQueryArgs)只是为了加 --sql flag,过度工程化了。原来的 for 循环里加几行 if 就能搞定,可读性更好。
✅ LGTM
亮点:
parseSenseQueryArgs重构很干净,step-based 解析比原来的 flag 跳过逻辑清晰很多--sqlflag 的单元测试覆盖全面(=语法、空格语法、优先级、缺值报错)小建议(不阻塞):
endIndexAfterGenericDashArg名字稍长,考虑skipDashArgValue之类的nextSenseQueryArgStep返回的nextIndex在--json分支设为i而非i+1,靠外层i++前进——能工作但不太直观,加个注释会更好