主要观点:using
关键字引入到 TypeScript 5.2 中,可用于测试以干净地封装创建和销毁测试资源的过程,如测试数据库和模拟服务器,避免资源冲突等问题。
关键信息:
- Explicit Resource Management proposal 被推进到阶段 3 并引入
using
关键字。 - 测试中常见问题是一个测试会影响后续测试,需将测试副作用导向专用资源,如使用临时目录测试文件系统操作。
- 用 Vitest 写测试,通过 globalSetup 脚本启动 PostgreSQL 容器,在测试中创建数据库克隆并避免冲突。
- 创建帮助函数
createDatabaseClient
来创建数据库客户端,每次克隆使用随机生成的数据库名,返回 Drizzle 数据库客户端和[Symbol.asyncDispose]
用于清理。 - 测试代码中使用
await using
语法创建和销毁数据库,其可翻译为传统的try...finally
结构,避免共享变量和测试步骤泄漏。
重要细节: - 在
vitest.config.ts
中指定globalSetup
为./src/testing/setup-db.ts
来启动数据库容器。 setup
函数创建容器、应用迁移、存储连接信息并停止容器,teardown
函数停止容器。createDatabaseClient
函数创建连接到容器的数据库客户端,使用随机数据库名避免冲突,返回客户端和清理函数。- 测试代码中使用
await using
创建数据库资源并进行操作,最终会自动清理。 - 对比其他测试框架,如 Golang 的
T.Cleanup
和 Ava 的t.teardown
,JavaScript 和 TypeScript 现在有描述资源生命周期的语法和运行时原语。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。