← 中文资源

简体中文版本

用 Faker 与固定种子播种测试数据库

用 faker 生成确定性假数据,固定随机种子使每次运行数据一致,并在测试套件间用事务回滚重置数据库。

阅读英文原文

确定性假数据

把 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 对非通用域可能产出不合法数据,需自定义生成器。