37 测试与调试 🕵️♂️之编写单元测试
在前一章中,我们探讨了如何使用 TypeScript 构建项目,了解了常见的项目模板与结构。现在,我们将关注测试与调试这一重要环节。在开发过程中,编写良好的单元测试可以保证代码的稳定性与可靠性,为后续功能的扩展提供信心。
什么是单元测试?
单元测试是对软件中最小可测试单元的验证。通常,这个单元是指一个单独的函数或方法。其目的是确保每个单元在预期的输入下返回预期的输出。通过单元测试,我们可以在代码修改后快速捕捉到潜在的错误。
使用 TypeScript 编写单元测试
在 TypeScript 中,编写单元测试的方式与 JavaScript 相似,但增加了类型安全的优势。我们通常使用 testing 框架来实现单元测试。在这个系列的后续章节中,我们将使用 Jest
框架来进行测试,它支持 TypeScript,并且功能丰富。
Jest 的安装与配置
首先,我们需要安装 Jest
及其相关的 TypeScript 支持库。在项目目录下,可以运行以下命令:
1 | npm install --save-dev jest ts-jest @types/jest |
接着,我们可以在项目根目录下创建一个 jest.config.js
文件,用于配置 Jest:
1 | module.exports = { |
这段配置使用了 ts-jest
作为预设,使 Jest 可以理解 TypeScript 代码。
编写第一个单元测试
假设我们要测试一个简单的加法函数。首先,我们创建一个文件 math.ts
,内容如下:
1 | export function add(a: number, b: number): number { |
接下来,我们创建一个测试文件 math.test.ts
:
1 | import { add } from './math'; |
在上面的例子中,我们使用 describe
定义一个测试组,并在其内部使用 it
来描述具体的测试用例。我们使用 expect
语句来断言函数的输出是否符合我们的预期。
运行测试
要运行测试,可以在终端中使用以下命令:
1 | npx jest |
如果一切正常,应该会看到类似于以下的输出,表明所有测试都通过了:
1 | PASS ./math.test.ts |
测试不通过的情况
现在,让我们故意修改 add
函数,使其返回错误的结果:
1 | export function add(a: number, b: number): number { |
再次运行测试,如果我们的测试用例是正确的,应该看到测试失败的消息,帮助我们快速定位问题。
常见的测试策略
在编写测试时,有一些常见的策略可以帮助你提高代码的质量和可维护性:
边界值测试:测试边界值和特殊情况。例如,对于加法函数,可以测试非常大的数字。
异常情况测试:确保函数在不合法输入下表现良好,例如字符串输入。
覆盖率测试:使用 Jest 的覆盖率功能来检查你的代码有多少被测试到了。在命令中添加
--coverage
参数,即npx jest --coverage
,可以生成覆盖率报告。
整合测试到 CI/CD 流程中
测试应该是开发过程中的一部分,最好在每次提交代码时运行。包括持续集成(CI)工具如 GitHub Actions、Travis CI 或 CircleCI。通过配置这些工具,在每次推送代码时自动运行测试,确保代码的稳定性。
结论
编写单元测试是确保代码质量的重要环节。通过合理配置和使用测试框架,我们可以有效地捕捉到代码中的问题,并在开发过程中保持代码的可靠性。在这一章中,我们学习了如何使用 Jest
编写基础的单元测试。在下一章中,我们将进一步探讨如何使用 Jest
进行更复杂的测试,包括异步测试和模拟。
37 测试与调试 🕵️♂️之编写单元测试