← 中文资源

简体中文版本

断言结构化日志字段

在测试中捕获结构化日志并按字段断言,而不是做脆弱的子串匹配,从而对日志行为做回归测试。

阅读英文原文

目标

一次重构悄悄丢掉了日志中的 request id,破坏了生产中的关联能力却没有任何测试发现。本配方通过注入日志汇聚点捕获日志行并解析为对象,再按字段断言必要信息(层级、请求 id、状态码);提醒时间戳用匹配器断言存在与格式,而非精确值。

步骤要点

  1. 注入日志汇聚点捕获日志行为对象。
  2. 按字段断言必要信息而非子串。
  3. 用匹配器断言时间戳存在与格式。
  4. 重构后确认缺字段会失败、改文案不失败。
const logs = [];
const sink = { write: (s) => logs.push(JSON.parse(s)), end: () => {} };
await handler(req, res, sink);

排错提示

  • 日志未被捕获通常是直接读全局 stdout。
  • 时间戳精确相等会导致脆弱。
  • 不校验日志内容的语义。

适用边界

  • 需要结构化日志。
  • 捕获钩子增加测试设置。