SuperAPI AI 工具集

verify-email-snapshots

测试与质量

查看项目

更新于 10-15 09:47

技能介绍

用途

verify-email-snapshots 是一个用于对邮件模板进行快照测试(Snapshot Testing)的 .NET 技能,基于 Verify 库实现。它通过捕获邮件模板渲染后的 HTML 输出,并与已批准的基线文件(.verified.html)比对,来捕获模板回归。

邮件模板具有视觉性(细微改动可能破坏各邮件客户端的渲染效果)、难以用传统单元测试覆盖(输出为复杂 HTML 而非简单值)、且容易发生回归(模板改动可能带来意外影响),因此适合采用快照测试。

适用时机:

  • 测试邮件模板渲染是否出现回归
  • 验证 MJML 模板编译为预期 HTML
  • 在代码审查中查看邮件改动(差异可视化)
  • 确保变量替换工作正常

相关技能:aspnetcore/mjml-email-templates(MJML 模板编写)、aspire/mailpit-integration(本地测试邮件投递)、testing/snapshot-testing(通用 Verify 模式)。

安装

dotnet add package Verify.Xunit # 或 Verify.NUnit、Verify.MSTest

主要能力

  • 基础邮件快照测试:渲染模板并调用 Verify(html, extension: "html"),首次运行生成 .verified.html 基线文件。
  • 模板变体测试:为每个邮件模板(如欢迎邮件的新用户/受邀用户版本、密码重置、付款收据)分别创建测试,捕获回归。可通过 UseMethodName 指定方法名。
  • 动态值擦除(Scrubbing):对测试间会变化的值进行擦除,常用方式包括 ScrubLinesContaining、ScrubInlineGuids,以及自定义正则擦除日期、带 token 的 URL、GUID 等。
  • 完整邮件对象测试:测试 composer 输出,包含主题、收件人与正文,可将 HtmlBody 存储为 .html 扩展名。
  • 测试夹具:示例提供 EmailTestFixture,用于构建包含配置与 IMjmlTemplateRenderer 的服务容器。
  • CI 集成:通过 VerifierSettings.ThrowOnMissingVerifiedFile() 在缺少基线文件时使测试失败,防止意外接受;在 .gitattributes 中配置 *.verified.html 以改进差异处理。

使用方式

  1. 创建模板:编写 MJML 模板。
  2. 编写测试:添加带示例变量的快照测试。
  3. 运行测试:首次运行创建 .verified.html。
  4. 审查:在浏览器中打开,确认渲染效果。
  5. 提交:将 .verified.html 纳入源代码管理。
  6. 迭代:变更会导致测试失败,审查差异,正确则接受。

审查模板变更时,测试失败并显示差异,可使用以下方式:

  • 可视化差异工具:安装 verify.tool(dotnet tool install -g verify.tool),使用 verify accept 接受全部待定更改、verify review 打开差异工具。
  • 浏览器预览:在浏览器中打开 .received.html 文件查看实际渲染。
  • IDE 集成:多数 IDE 会显示 .verified.html 与 .received.html 的内联差异。

适用场景

  • .NET 项目中邮件模板的回归测试
  • MJML 模板编译结果的正确性验证
  • 代码审查中查看邮件渲染的视觉差异
  • 多模板变体(欢迎、密码重置、账单等)的覆盖测试

限制

  • 资料未提供价格、收费或其他平台支持信息。
  • 资料未提供除 .NET(Verify.Xunit / Verify.NUnit / Verify.MSTest)之外的语言或框架支持信息。
  • 资料未提供性能指标或具体版本兼容性信息。

最佳实践

建议:为每个模板变体编写测试;使用描述性测试名;一致地擦除动态值;接受前仔细审查差异(verify review)。

不建议:跳过邮件测试;未经审查自动接受更改(verify accept --all 存在风险);只测试主流程;忽略快照测试失败。

资源

  • Verify:https://github.com/VerifyTests/Verify
  • Verify.Xunit:https://github.com/VerifyTests/Verify#xunit
  • Diff Tools:https://github.com/VerifyTests/DiffEngine