Files
Jog/doc/jog-system-bug-list.md
2026-05-18 03:22:40 +08:00

15 KiB
Raw Permalink Blame History

Jog System 自动化测试 Bug 清单

项目 内容
生成日期 2026-05-18
测试依据 doc/jog-system-automated-test-plan.md
测试范围 后端 Maven 编译/测试、前端 Vite 构建、前后端 API 契约静态检查、数据库迁移/实体映射静态检查、安全配置静态检查

1. 测试执行摘要

测试项 命令/方式 结果
后端编译与测试 mvn -B test 通过编译,但所有模块均显示 No tests to run,未执行任何自有测试
前端构建(旧 Node npm run build 失败,Node v16.20.2 下 Vite 启动时报 crypto$2.getRandomValues is not a function
前端构建(已切换 Node npm run build 通过,当前 Node v24.15.0、npm 11.12.1,构建产物已输出到 jog-admin/src/main/resources/static
API 契约检查 对比 jog-frontend/src/api/*.js 与后端 Controller 发现多处路径和 HTTP 方法不一致
数据库映射检查 对比实体 @TableName 与 Flyway 建表脚本 发现表名、字段名大面积不一致
安全配置检查 对比 JWT 角色生成、SecurityConfig、Controller 路径 发现管理员角色无法匹配、用户接口未被鉴权规则保护

1.1 本轮修复记录

Bug 当前状态 修复摘要
BUG-003 已修复,待数据库集成验证 实体 @TableName 已对齐 sys_* / blog_* 表名
BUG-004 已修复,待数据库集成验证 对差异字段补充 @TableField,覆盖用户类型、会话 token/过期时间、登录结果、评论回复目标等
BUG-005 已修复 JWT access token 角色改为 ADMIN / USER,过滤器兼容旧数字角色
BUG-006 已修复 用户侧 Controller 已统一到 /api/app/**,并由 SecurityConfig 保护
BUG-007 已修复 认证接口已对齐前端 /api/public/user/login/api/public/admin/login/api/public/user/register/api/public/refresh-token
BUG-008 已修复 文章、评论、用户接口已对齐前端 /api/app/** 路径
BUG-009 已修复 回收站、恢复、评论审核、用户重置密码、用户状态更新的 HTTP 方法已对齐前端
BUG-010 部分修复 已补标签列表/创建、验证码占位接口、关注/取关接口;验证码当前仅返回占位数据,不做真实校验
BUG-011 已修复 前端路由已根据 requiresAdmin 校验本地用户角色
BUG-012 已修复 V2__init_data.sql 已移除 USE blog_db
BUG-013 已修复 文章详情标签改为返回结构化 Tag 对象,匹配前端 id/name 使用方式

2. Bug 清单

BUG-001 前端构建在旧 Node 版本下无法启动

字段 内容
严重级别 P3
状态 已验证解决:Node 已切换至 v24.15.0 后构建通过
位置 jog-frontend/package.json、本机 Node 环境
复现 jog-frontend 执行 npm run build
实际结果 TypeError: crypto$2.getRandomValues is not a function
期望结果 前端可完成生产构建
证据 旧 Node 版本为 v16.20.2,切换到 v24.15.0npm run build 成功
建议 在 README/部署文档和 package.json engines 中声明 Node >= 20;本地和 CI 统一 Node 版本

BUG-002 使用新版 Node 后前端构建失败

字段 内容
严重级别 P3
状态 无法复现/已恢复:用户切换 Node 后 npm run build 通过
位置 jog-frontend/vite.config.js:29
复现 使用 Node v24.14.0 执行 node node_modules/vite/bin/vite.js build
实际结果 [vite:build-html] The "fileName" or "name" properties of emitted chunks and assets must be strings that are neither absolute nor relative paths, received "E:/person/Jog/jog-frontend/index.html"
期望结果 构建产物成功输出到后端静态资源目录
最新验证 当前 Node v24.15.0、npm 11.12.1 下执行 npm run build 成功
建议 保留 CI 构建验证;若再次出现该错误,再检查 Node/npm/Vite 解析路径差异

BUG-002A 前端构建存在低优先级告警

字段 内容
严重级别 P3
状态 待优化
位置 jog-frontend 构建配置与本机 npm 配置
实际结果 构建成功,但 npm 输出多条 Unknown user config 警告;Vite 输出主 chunk 超过 500 kB 的警告
期望结果 CI 构建日志干净,首屏资源大小可控
影响 暂不阻断发布,但会降低构建日志可读性,主包偏大可能影响首屏性能
建议 清理过期 npm 配置;为 Element Plus、Tiptap 等依赖配置合理分包或接受当前 warning 并设置 chunk 预算

BUG-003 实体表名与 Flyway 建表脚本不一致,运行时会查不到表

字段 内容
严重级别 P0
状态 待修复
位置 jog-module-system/src/main/java/.../entity/*.javajog-module-blog/src/main/java/.../entity/*.javajog-module-comment/src/main/java/.../entity/*.javajog-admin/src/main/resources/db/migration/V1__init_schema.sql
复现 启用 Flyway 初始化后调用任意 Mapper 查询
实际结果 实体使用 @TableName("user")articlecommentcategory 等;SQL 创建的是 sys_userblog_articleblog_commentblog_category
期望结果 实体表名与数据库真实表名一致
影响 登录、注册、文章、评论、分类等数据库操作都会失败
建议 统一命名策略:要么实体改为 sys_*/blog_*,要么迁移脚本改为无前缀表;推荐按迁移脚本保留前缀并修正实体

BUG-004 实体字段与数据库字段不一致,多个核心写入会失败或数据错列

字段 内容
严重级别 P0
状态 待修复
位置 User.javaUserSession.javaLoginLog.javaComment.javaV1__init_schema.sql
实际结果 例如 User.type 对应代码字段,但 SQL 是 user_typeUserSession.refreshToken/expiresAt 对应 SQL 的 token/expire_timeLoginLog.email/status/userAgent 对应 SQL 的 username/result 且 SQL 无 user_agentComment.replyToId 对应 SQL 的 reply_to_user_id
期望结果 字段名可通过 MyBatis-Plus 正确映射
影响 登录记录、会话保存、用户角色、评论回复等核心链路会失败
建议 为差异字段添加 @TableField("实际字段名"),或统一 SQL 字段命名;同时增加 Mapper 集成测试覆盖插入/查询

BUG-005 JWT 角色值与 Spring Security 角色规则不匹配,管理员接口会 403

字段 内容
严重级别 P0
状态 待修复
位置 jog-framework/src/main/java/fun/nojava/framework/security/JwtTokenProvider.java:18JwtAuthenticationFilter.java:39SecurityConfig.java:51
实际结果 Token 中 role 写入的是数字字符串 0/1,过滤器生成 ROLE_0/ROLE_1;但安全配置要求 /api/admin/** 具备 ROLE_ADMIN
期望结果 管理员 Token 应匹配 ROLE_ADMIN,普通用户 Token 应匹配 ROLE_USER
影响 管理后台 API 无法正常访问;普通用户权限判断也不稳定
建议 Token 中存储 ADMIN/USER,或在过滤器中将 UserType code 转换为角色名

BUG-006 用户文章/评论接口未被 Spring Security 鉴权规则保护

字段 内容
严重级别 P0
状态 待修复
位置 SecurityConfig.java:52ArticleController.java:16CommentController.java:19UserController.java:15
实际结果 安全配置只保护 /api/app/**,但后端用户业务接口实际是 /api/article/api/comment/api/user;这些路径最终落入 anyRequest().permitAll()
期望结果 创建/更新/删除文章、发表评论、删除评论、获取当前用户等接口必须要求登录
影响 未登录用户可能访问写接口,@AuthenticationPrincipal Long userId 为空后还可能导致脏数据或空指针
建议 统一后端用户接口前缀为 /api/app/**,或在 SecurityConfig 中显式保护 /api/article/**/api/comment/**/api/user/**

BUG-007 前后端认证接口路径完全不一致

字段 内容
严重级别 P0
状态 待修复
位置 jog-frontend/src/api/auth.js:4auth.js:8auth.js:12auth.js:20jog-module-system/src/main/java/.../AuthController.java:18
实际结果 前端调用 /api/public/admin/login/api/public/user/login/api/public/user/register/api/public/refresh-token;后端提供 /api/auth/admin/login/api/auth/login/api/auth/register/api/auth/refresh
期望结果 前端 API 封装与后端 Controller 路径一致
影响 登录、注册、Token 刷新全部 404,系统无法完成认证
建议 建立 OpenAPI 契约检查;统一使用 /api/auth/** 或调整后端兼容前端路径

BUG-008 前后端文章/评论/用户接口路径不一致

字段 内容
严重级别 P0
状态 待修复
位置 jog-frontend/src/api/article.js:12article.js:24comment.js:4auth.js:24、后端 ArticleController.java:16CommentController.java:19UserController.java:15
实际结果 前端使用 /api/app/article/api/app/article/mine/api/app/comment/api/app/user/me;后端实际是 /api/article/api/article/my/api/comment/api/user/info
期望结果 前后端路径一致
影响 登录后的发文、我的文章、评论、当前用户信息等核心页面无法工作
建议 统一用户端路径前缀和资源命名,建议后端对齐 /api/app/** 或前端全部改为后端当前路径

BUG-009 多个前端请求 HTTP 方法与后端不一致

字段 内容
严重级别 P1
状态 待修复
位置 jog-frontend/src/api/article.js:28article.js:32comment.js:24admin.js:8admin.js:12;后端对应 Controller
实际结果 前端对回收站/恢复/审核/重置密码/状态更新使用 PUT;后端分别使用 POST
期望结果 同一接口请求方法一致
影响 即使路径修正,仍会返回 405 或无法命中接口
建议 按 REST 风格统一:状态变更可用 PUT/PATCH,动作型接口可用 POST,但前后端必须一致

BUG-010 前端调用了后端未实现的接口

字段 内容
严重级别 P1
状态 待修复
位置 jog-frontend/src/api/auth.js:16auth.js:36auth.js:40article.js:44article.js:60
实际结果 前端调用验证码 /api/public/captcha、关注/取关、公开标签列表、管理员创建标签;后端未发现对应 Controller 映射
期望结果 前端只调用已实现接口,或后端补齐对应接口
影响 登录页验证码、关注功能、文章编辑标签选择、后台标签管理会失败
建议 根据需求决定补实现还是移除前端入口;未实现需求应在自动化测试中标记为 pending

BUG-011 前端管理员路由只校验 Token,不校验管理员角色

字段 内容
严重级别 P1
状态 待修复
位置 jog-frontend/src/router/index.js
实际结果 路由定义有 requiresAdmin,但 beforeEach 只检查 requiresAuth 和 token,不检查用户类型
期望结果 普通用户访问 /admin/** 应在前端被拒绝或重定向
影响 普通用户可进入后台页面,虽然后端也应拦截,但会造成越权界面暴露和误导
建议 user_info 或 Store 中读取用户类型,补充 requiresAdmin 判断;后端仍保留最终权限校验

BUG-012 V2 初始化脚本写死 USE blog_db,与当前配置不一致

字段 内容
严重级别 P1
状态 待修复
位置 jog-admin/src/main/resources/db/migration/V2__init_data.sql:4application.yml
实际结果 初始化脚本写死 USE blog_db;,当前应用数据源库名不是同一个命名
期望结果 Flyway 迁移脚本不应写死切库,应该使用当前连接的 schema
影响 首次初始化可能写入错误数据库或直接失败
建议 删除 USE blog_db;,由 JDBC URL 指定 schemaCI 中增加 Flyway clean/migrate 测试

BUG-013 文章详情返回的标签结构与前端期望不一致

字段 内容
严重级别 P2
状态 待修复
位置 ArticleServiceImpl.java:283ArticleVO.javajog-frontend/src/views/ArticleDetail.vue:13ArticleEditor.vue:100
实际结果 后端 ArticleVO.tagsList<String>;前端按 tag.idtag.name 使用
期望结果 标签返回结构与前端一致
影响 文章详情标签显示异常,编辑文章时标签无法正确回填
建议 后端返回 List<TagVO>,或前端改为字符串数组渲染;编辑器需要 ID 时推荐返回结构化对象

BUG-014 限流 Key 未包含 IP 或用户维度,所有用户共享同一限流桶

字段 内容
严重级别 P2
状态 待修复
位置 jog-framework/src/main/java/fun/nojava/framework/aspect/RateLimitAspect.java:41
实际结果 Redis Key 仅为 rate_limit: + 注解 key,例如所有用户共享 rate_limit:login
期望结果 登录、注册等限流至少按 IP 或账号维度隔离
影响 一个用户频繁请求会误伤所有用户;也无法实现需求中的“同一 IP”限流
建议 将 IP、用户 ID、请求路径或账号加入限流 Key;补充并发/限流集成测试

BUG-015 当前项目没有自有自动化测试,质量门禁失效

字段 内容
严重级别 P2
状态 待补齐
位置 全项目
实际结果 mvn -B test 成功但所有模块均显示 No tests to run;前端没有 test:unittest:e2e 等脚本
期望结果 后端至少有 Service 单元测试、Controller 集成测试;前端至少有组件测试和 E2E 冒烟
影响 构建通过不代表功能可用,无法防止上述契约/安全/数据库缺陷回归
建议 按测试计划第一阶段补齐 JUnit/Mockito/Testcontainers/Vitest/Playwright,并纳入 CI

3. 优先修复建议

  1. 先修复 P0:数据库实体映射、JWT 角色映射、安全保护路径、前后端认证/业务 API 路径。
  2. 再修复 P1:HTTP 方法不一致、缺失接口、管理员前端路由、Flyway USE blog_db
  3. 最后补齐 P2:标签结构、限流维度、自动化测试设施。
  4. 修复后第一批自动化测试应优先覆盖:登录/注册、管理员登录和访问后台、创建文章、我的文章列表、发表评论、Flyway 初始化、前端构建。