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
2
3
4
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};

这段配置使用了 ts-jest 作为预设,使 Jest 可以理解 TypeScript 代码。

编写第一个单元测试

假设我们要测试一个简单的加法函数。首先,我们创建一个文件 math.ts,内容如下:

1
2
3
export function add(a: number, b: number): number {
return a + b;
}

接下来,我们创建一个测试文件 math.test.ts

1
2
3
4
5
6
7
8
9
import { add } from './math';

describe('add', () => {
it('should return the sum of two numbers', () => {
expect(add(1, 2)).toBe(3);
expect(add(-1, 1)).toBe(0);
expect(add(0, 0)).toBe(0);
});
});

在上面的例子中,我们使用 describe 定义一个测试组,并在其内部使用 it 来描述具体的测试用例。我们使用 expect 语句来断言函数的输出是否符合我们的预期。

运行测试

要运行测试,可以在终端中使用以下命令:

1
npx jest

如果一切正常,应该会看到类似于以下的输出,表明所有测试都通过了:

1
2
3
PASS  ./math.test.ts
add
✓ should return the sum of two numbers (5 ms)

测试不通过的情况

现在,让我们故意修改 add 函数,使其返回错误的结果:

1
2
3
export function add(a: number, b: number): number {
return a - b; // 故意错误
}

再次运行测试,如果我们的测试用例是正确的,应该看到测试失败的消息,帮助我们快速定位问题。

常见的测试策略

在编写测试时,有一些常见的策略可以帮助你提高代码的质量和可维护性:

  • 边界值测试:测试边界值和特殊情况。例如,对于加法函数,可以测试非常大的数字。

  • 异常情况测试:确保函数在不合法输入下表现良好,例如字符串输入。

  • 覆盖率测试:使用 Jest 的覆盖率功能来检查你的代码有多少被测试到了。在命令中添加 --coverage 参数,即 npx jest --coverage,可以生成覆盖率报告。

整合测试到 CI/CD 流程中

测试应该是开发过程中的一部分,最好在每次提交代码时运行。包括持续集成(CI)工具如 GitHub Actions、Travis CI 或 CircleCI。通过配置这些工具,在每次推送代码时自动运行测试,确保代码的稳定性。

结论

编写单元测试是确保代码质量的重要环节。通过合理配置和使用测试框架,我们可以有效地捕捉到代码中的问题,并在开发过程中保持代码的可靠性。在这一章中,我们学习了如何使用 Jest 编写基础的单元测试。在下一章中,我们将进一步探讨如何使用 Jest 进行更复杂的测试,包括异步测试和模拟。

37 测试与调试 🕵️‍♂️之编写单元测试

https://zglg.work/typescript-zero/37/

作者

IT教程网(郭震)

发布于

2024-09-14

更新于

2024-09-14

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论