duange.ai
← 返回文章
长文Agent 整理

把下载模板放回内容目录:一次草稿隔离回归测试

将真实下载文件复制进临时博客项目,重新构建并检查输出,验证文章模板不会因为被放进内容目录而自动公开。

Markdown 阅读版 ↗

读完你会得到什么

  • 测试直接使用提供给读者的下载文件,避免样例与实际模板不一致。
  • 在临时项目中构建,检查模板没有文章页面,也没有进入公开索引。
  • 本地测试能验证发布规则,不能证明内容事实正确或网站已经上线。
查看 2 项来源 ↗

示例验证环境

验证于 2026.09.10 · macOS / Apple Silicon · Node.js 24.10.0 · npm 11.6.1 · Astro 7.3.2

独立示例 v1.0.0 的两次本地构建已通过;未在 Windows 或其他 Node.js 版本验证,不代表线上部署状态。

资料包里提供了一份可以直接复制使用的文章模板。它带有完整的 frontmatter,读者拿到后可能马上把它放进内容目录。需要验证的问题很具体:文件被识别为一篇文章后,会不会直接出现在公开页面里?

本站针对这个场景增加了回归检查。下面记录测试的输入、执行方式和判断依据;它验证的是本地构建行为。

输入:真正提供下载的那份文件

测试输入来自 public/downloads/agent-content-kit-v1/article-template.md。其中的起稿状态是:

kind: note
createdWith: agent
pubDate: 2026-09-10
draft: true

日期有效,字段可以被内容集合接受。阻止它公开的关键是草稿状态,而不是故意写一个无法解析的文件。正文也要求使用者替换标题、日期、依据和实际结果。

测试没有另写一份相似样例,而是直接复制下载文件。这样,日后有人修改资料包模板,检查会覆盖修改后的真实内容。

做法:在临时项目里模拟一次复制

tests/blog.test.mjs 会建立临时目录,复制源码、公开资源与构建配置,并把下载模板放进临时项目的文章目录:

await cp(
  join(workspace, "public/downloads/agent-content-kit-v1/article-template.md"),
  join(content, "resource-template.md"),
);

这里的 content 指向临时项目的 src/content/blog/regression。接着测试运行 Astro 构建,并要求进程成功退出。

两个条件需要同时成立:模板是一份合法内容,构建能够通过;它仍然是草稿,公开产物不能包含对应文章。仅仅让构建报错,不能说明草稿隔离实现正确。

验收:检查输出,而不只检查字段

构建后,测试枚举 dist,确认没有生成模板的文章页面:

assert.ok(
  !files.some(file => file.startsWith("blog/regression/resource-template/")),
  "下载模板复制到内容目录后仍然保持草稿",
);

同时核对首页、文章列表、RSS 和 sitemap 不包含它的文章路径,避免“没有独立页面,但仍泄漏到订阅或索引”的情况。

这是可以在项目根目录执行的检查:

pnpm test
pnpm build

本次实现已在本地执行上述检查,模板保持草稿隔离。测试使用临时项目,结束后清理,不会把样例文章留在正式内容目录。完整套件还会覆盖缺少草稿字段、未来日期以及草稿预览不进入生产产物等情形。

本文对应的资料版本

本文使用 Agent 内容运营资料包 v1.0.0 中的文章模板,独立示例为 v1.0.0。资料页保留版本说明和原始下载入口;有后续版本时,请按版本选择对应文件。

不需要本站仓库,也可以复现

下载独立示例 demo.mjs。使用 Node.js 24 和 npm,在文件所在目录执行:

node demo.mjs

脚本会在系统临时目录建立最小 Astro 项目,通过 npm 下载 Astro 7.3.2,因此需要网络。它不读取你的博客仓库,不部署网站,结束后清理临时目录。可先用文本编辑器查看脚本再运行。

这个示例使用两个固定样例:一篇公开文章和一份草稿。第一次构建要求公开文章存在,而草稿不进入文章页面、首页、RSS 和 sitemap;第二次把草稿改为公开,再确认它进入这些产物。

成功时会输出:

PASS:公开对照文章存在;草稿不进入文章页面、首页、RSS、sitemap。
PASS:改为 draft: false 后,模板进入公开产物;发布边界生效。
临时项目已清理。

独立示例演示同一套筛选原则,使用精简页面与固定测试数据;它不包含本站完整模板、样式或所有校验。上文的仓库回归测试仍直接使用真实下载模板。安装失败或任何断言不通过时,脚本以非零状态退出。

这个结果的适用范围

它证明的是本站当前构建规则对这份模板的处理方式。把模板改成 draft: false 并满足日期条件后,文章会获得公开构建资格;测试并不会判断其中的事实是否真实。

用于其他博客时,需要检查那个项目的发布规则。字段名相同不代表行为相同,也不能把本地构建成功写成正式域名已经上线。

这个测试很小,却能在资料包、内容字段和构建逻辑变化时检查同一个具体场景。比起只在文档里写“默认是草稿”,它额外留下了一次可以重复执行的验证。

GO TO THE SOURCE

参考来源

  1. Astro 内容集合docs.astro.build
  2. 本站的文章验收方法duange.ai

duangeTHANKS FOR READING
继续阅读