📜  测试有什么 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:56:05.252000             🧑  作者: Mango

测试有什么 - TypeScript

测试是软件开发过程中不可或缺的一步,它可以帮助我们发现程序中的问题,确保我们的代码更加健壮和可靠。TypeScript 是一种静态类型的编程语言,它能够为我们带来更好的代码可读性和可维护性。在本篇文章中,我们将探讨 TypeScript 中的测试相关内容。

Jest

Jest 是一个流行的 JavaScript 测试框架,它支持断言、异步测试、覆盖率报告、快照测试等功能。通过使用 Jest,我们可以轻松地进行测试,从而确保我们的代码质量。

安装 Jest

我们可以使用 npm 安装 Jest:

npm install jest --save-dev
编写测试用例

然后,我们可以开始编写测试用例。一个简单的测试示例如下:

// math.ts

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

// math.test.ts

import { add } from './math';

test('addition', () => {
  expect(add(2, 3)).toBe(5);
});

在上面的代码中,我们定义了一个简单的加法函数。然后,在 math.test.ts 文件中,我们导入了这个函数,并定义了一个测试用例。该测试用例使用 expect 函数进行判断,确保 add 函数的返回值等于 5。

运行测试

我们可以在命令行中运行 Jest 来执行测试:

npx jest

Jest 会自动查找所有以 .test.ts 后缀结尾的文件,并执行其中的测试用例。测试结果将会以彩色的形式在控制台中输出。

Test-driven Development (TDD)

TDD 是一种以测试为驱动的开发方法。在 TDD 中,我们首先编写测试用例,然后编写代码使其能够通过这些测试用例。这种方法可以帮助我们更好地理解代码所需要完成的功能,并在代码变更时保障其正确性。

编写测试

使用 TDD 进行开发时,我们首先要编写测试用例。下面是一个简单的例子:

// fizzbuzz.test.ts

import { fizzbuzz } from './fizzbuzz';

test('FizzBuzz', () => {
  expect(fizzbuzz(15)).toBe('FizzBuzz');
  expect(fizzbuzz(3)).toBe('Fizz');
  expect(fizzbuzz(5)).toBe('Buzz');
  expect(fizzbuzz(7)).toBe('7');
});

在上面的代码中,我们定义了一个名为 fizzbuzz 的函数,该函数接受一个数字作为输入,并返回一些字符串。接着,我们编写了一组测试用例,用于确保 fizzbuzz 函数能够正确地工作。

编写代码

当我们编写完测试用例后,就可以开始编写代码了。下面是一个可能的实现:

// fizzbuzz.ts

export function fizzbuzz(n: number) {
  if (n % 15 === 0) {
    return 'FizzBuzz';
  } else if (n % 3 === 0) {
    return 'Fizz';
  } else if (n % 5 === 0) {
    return 'Buzz';
  } else {
    return n.toString();
  }
}

在上面的代码中,我们使用了 if/else 语句来判断输入数字的类型,并返回相应的字符串。最后一个 else 用于处理非 Fizz、Buzz 或 FizzBuzz 的情况。

运行测试

当我们完成代码编写后,就可以运行测试了。在命令行中运行 Jest:

npx jest

如果所有测试用例都能够通过,我们就可以将代码提交到版本控制系统中。如果其中某些测试用例失败了,我们需要重新检查代码并进行修复,然后再次执行测试,直到所有测试用例都能够通过。

Assertion library

在测试中,我们需要使用断言函数来判断程序的输出是否符合预期。在 Jest 中,常见的断言函数包括 expect、toBe、toEqual、toMatch 等。

expect 函数

expect 函数是 Jest 中最常用的断言函数。它的作用是判断程序输出是否符合预期。例如:

test('addition', () => {
  const result = add(2, 3);
  expect(result).toBe(5);
});

在上面的代码中,我们使用 expect 函数判断 add 函数的返回值是否为 5。如果断言失败,Jest 就会输出错误信息,并将测试结果标记为失败。

toBe 函数

toBe 函数用于比较两个值是否相等。例如:

test('addition', () => {
  const result = add(2, 3);
  expect(result).toBe(5);
});

在上面的代码中,我们使用 toBe 函数判断 add 函数的返回值是否为 5。如果判断失败,Jest 就会输出错误信息。

toEqual 函数

toEqual 函数用于比较两个对象是否相等。例如:

test('object equality', () => {
  const obj1 = { a: 1, b: 2 };
  const obj2 = { b: 2, a: 1 };
  expect(obj1).toEqual(obj2);
});

在上面的代码中,我们使用 toEqual 函数判断两个对象是否相等。即使这两个对象的属性名顺序不同,我们也能够通过这个测试用例。

toMatch 函数

toMatch 函数用于比较字符串是否匹配某个模式。例如:

test('string matching', () => {
  const str = 'Hello, world!';
  expect(str).toMatch(/world/);
});

在上面的代码中,我们使用 toMatch 函数判断字符串中是否包含 word 这个子串。如果判断失败,Jest 就会输出错误信息。

Coverage reports

测试覆盖率是一个衡量测试质量的指标。在 Jest 中,我们可以使用 coverage reports 查看测试覆盖率。例如,在项目的 package.json 文件中添加如下配置:

// package.json

"scripts": {
  "test": "jest --coverage"
}

然后,在命令行中运行 npm test 命令,即可生成一个覆盖率报告。该报告会显示我们的测试覆盖率,如图所示:

Coverage report

Conclusion

在这篇文章中,我们介绍了 TypeScript 中的测试相关内容。我们了解了 Jest 的基本用法、TDD 的开发方式、断言函数的使用方法以及测试覆盖率的概念。通过测试,我们能够更加自信地发布我们的代码,并保障其质量和稳定性。