由于网络限制(无法拉取 Docker 镜像),本地测试采用 Node.js test-runner 方案:
scripts/test-runner.js— 读取 event fixture,注入模拟环境变量,直接运行process_submission.js- 无需 Docker,直接用 Node.js 执行,完整验证业务逻辑
- Node.js 18+
- Git(用于 git 操作)
gh已登录:gh auth login
# 运行特定场景
node scripts/test-runner.js act-issue-closed-approved.json # 正常归档
node scripts/test-runner.js act-issue-closed-invalid.json # 缺失字段
node scripts/test-runner.js act-issue-closed-duplicate.json # 重复提交注意:
act-issue-closed-no-label.json需通过 GitHub Actions workflow 验证(label 检查在 workflow 层)
| 文件 | 场景 |
|---|---|
act-issue-closed-approved.json |
Issue 有 approved 标签,正常归档 |
act-issue-closed-invalid.json |
必填字段缺失,打 invalid + comment |
act-issue-closed-duplicate.json |
URL 重复,打 duplicate + comment |
act-issue-closed-no-label.json |
无 approved 标签,workflow 层静默跳过 |
test-runner.js
→ 读取 act-*.json(模拟 GitHub event)
→ 设置环境变量(GITHUB_TOKEN, ISSUE_NUMBER, ISSUE_BODY 等)
→ 运行 process_submission.js
→ process_submission.js 识别 ACT=true,进入测试模式
→ GitHub API 调用和 git push 被 mock(打印日志,不实际执行)
→ 验证文件生成和 README 更新结果
运行后检查:
- 墓碑文件是否在正确目录生成:
Beautiful-Junk/test-approved-project.md - README 索引是否正确插入(在分类表格
|---|---|---|之后) - 退出码是否符合预期(错误场景应 exit 1)
# 检查墓碑文件
ls Beautiful-Junk/test-approved-project.md
# 检查 README 插入结果
grep -A2 "test-approved" README.md
# 检查 Git 操作日志(应显示跳过)测试模式(ACT=true)下 git 操作被跳过,会打印应执行的命令:
[TEST] Git 操作已跳过(ACT=true)
[TEST] 应执行: git add -A && git commit -m "feat: add ..." && git push
如需验证完整 git 操作(会写入本地 .git),使用:
# 在测试分支上运行
git checkout -b act-test
node scripts/test-runner.js act-issue-closed-approved.json
git log --oneline -3 # 查看 commit
git reset --hard HEAD~1 # 测试完成后回滚
git checkout main && git branch -D act-test- 复制
.github/ISSUE_TEMPLATE/bury-my-project.yml作为参考 - 在
act-*.json中构造 Issue body,确保包含完整的## 字段名\n\n内容格式 - 关键字段:
issue.labels— 决定触发哪条逻辑issue.body— 决定解析结果issue.user.login— 成为 README 中的提交人
如果 Docker Hub 可达,可改用 act 完整模拟:
# 安装 act
brew install act
# act 配置(.actrc)
-P ubuntu-latest=ghcr.io/catthehacker/ubuntu:full
--container-daemon-socket /Users/lixuejiang/.orbstack/run/docker.sock
# 运行
act issues -e act-issue-closed-approved.json