主要观点:避免编写缓慢且脆弱的测试,尤其在 TDD 工作流中,可通过多种方式减少测试对数据库等的依赖以提高速度和可靠性。
关键信息:
- 使用数据库:数据库访问会增加测试成本,应减少其使用,如在测试只涉及内存值的方法时可不访问数据库。
- 关联关系:小心处理工厂的关联,可通过特质创建关联并避免创建不必要的记录,还可使用
build_stubbed
避免访问数据库。 - 跟踪数据库变化:禁用
paper_trail
等跟踪数据库变化的 gem,可在需要时重新启用。 - 创建多条记录:尽量减少创建的数据库记录数量,可配置每页显示的记录数。
- 安全性:测试非安全相关代码时可禁用高安全特性,如降低密码哈希算法的强度。
- 使用真实浏览器:能避免使用浏览器时就避免,使用
request tests
或RackTest
,若必须使用可减少其使用。 - 日志记录:测试中一般可禁用日志记录,可通过环境变量控制,且使用块语法避免不必要的分配。
- 运行更少的测试:减少运行的代码量可加快测试速度,开发时可分阶段运行不同类型的测试,部署前可先运行烟雾测试。
- 测试金字塔:牢记测试金字塔原则,减少对系统测试的依赖,更多使用其他类型的测试。
重要细节:
- 在 Rails 应用中,完全避免数据库不太可能,但可减少其使用。
- 工厂特质可明确创建关联时的需求,
build_stubbed
比create
/build
更能避免访问数据库。 - 可通过配置环境变量控制日志记录,块语法能避免不必要的分配。
- 测试金字塔中不同类型测试各有作用,系统测试慢且脆弱,应作为重要路径的烟雾测试等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。