目标
某响应字段被改名导致客户端中断,因为没有任何测试把响应形状当作契约。本配方先规范化易变字段(id、时间戳)再快照响应,使快照反映真实契约;快照只能通过评审更新,任何字段变更都以快照差异呈现给评审者;提醒快照不校验语义。
步骤要点
- 规范化易变字段后再快照响应。
- 使快照只能经评审更新,禁止在 CI 中批量更新。
- 规范化所有生成的 id 与时间戳。
- 把字段改名视为需评审的契约变更。
const res = await request(app).get('/api/users/1');
const stable = { ...res.body, id: '<id>', createdAt: '<ts>' };
expect(stable).toMatchSnapshot();
排错提示
- 盲目更新快照会掩盖变更。
- 易变字段会产生噪声。
- 快照不校验语义。
适用边界
- 不能替代 schema 校验。
- 大快照难以评审。