← 中文资源

简体中文版本

为 REST 接口做响应快照

为 REST 端点采集规范化后的响应快照,使非预期的契约变更在评审阶段失败而非到达客户端。

阅读英文原文

目标

某响应字段被改名导致客户端中断,因为没有任何测试把响应形状当作契约。本配方先规范化易变字段(id、时间戳)再快照响应,使快照反映真实契约;快照只能通过评审更新,任何字段变更都以快照差异呈现给评审者;提醒快照不校验语义。

步骤要点

  1. 规范化易变字段后再快照响应。
  2. 使快照只能经评审更新,禁止在 CI 中批量更新。
  3. 规范化所有生成的 id 与时间戳。
  4. 把字段改名视为需评审的契约变更。
const res = await request(app).get('/api/users/1');
const stable = { ...res.body, id: '<id>', createdAt: '<ts>' };
expect(stable).toMatchSnapshot();

排错提示

  • 盲目更新快照会掩盖变更。
  • 易变字段会产生噪声。
  • 快照不校验语义。

适用边界

  • 不能替代 schema 校验。
  • 大快照难以评审。