用途:该技能用于编写相互独立的测试,确保每个测试自行准备状态、自行清理,不依赖其他测试的执行结果或顺序。
主要能力:识别测试间的依赖气味,例如在测试外声明并在测试内修改的共享变量、依赖前一个测试创建的数据、依赖固定执行顺序、beforeAll 创建被多个测试共用的数据,以及“在测试 X 之后运行”这类注释。技能给出正确模式:每个测试在 Arrange 阶段创建自己的数据,使用 beforeEach 建立全新实例,afterEach 清理。
隔离技术:1) 每个测试使用全新实例,如 beforeEach 中 new Service(new MockDependency());2) 数据库事务,beforeEach 中 await db.beginTransaction(),afterEach 中 await db.rollback();3) 内存存储,beforeEach 中 new InMemoryRepository();4) 工厂函数,如 createTestUser(overrides) 为每个测试生成独立数据。
适用场景:任何使用共享数据的测试、必须按特定顺序运行的测试、单独运行或随机失败的测试、无法并行运行的测试套件。
限制与原则:核心规则是绝不让一个测试依赖另一个测试的状态或执行。资料明确拒绝“更高效”“第一个测试创建数据”“它们总是按顺序运行”“在我机器上能跑”等理由。若测试无法单独运行并通过,则不是有效测试。资料未提供具体安装命令、平台或收费信息。