确定性假数据
把 faker 固定到种子,每次运行产生相同行。失败测试复现相同数据,快照 diff 即真实变更而非随机。
import { faker } from '@faker-js/faker';
faker.seed(42);
const users = Array.from({ length: 100 }, () => ({
email: faker.string.uuid() + '@test.example',
created: faker.date.past(),
}));
回滚而非 truncate
每个测试包在事务中,teardown 回滚。套件间无行残留,重置以毫秒计而非全表 truncate。包装 client 使 stray commit 无法逃出回滚。
beforeEach(async () => { tx = await client.query('BEGIN'); });
afterEach(async () => { await client.query('ROLLBACK'); });
预期结果
每次运行产生相同行,每个测试从干净库开始,套件因回滚重置而快速。faker 需锁定确切版本,升级不静默改变种子输出。回滚不重置序列,serial id 仍跨测试递增,断言特定 id 时需注意;faker 对非通用域可能产出不合法数据,需自定义生成器。