如何使用 Jest 和 TypeScript 进行单元测试

1. 环境准备

  要在项目中使用 TypeScript 和 Jest,首先确保你已安装以下工具:

  ·Node.js(建议使用 v16 或更高版本)

  · npm 或 yarn

  · TypeScript(建议使用最新版)

  确认安装:

node -v
  npm -v

 

2. 配置项目

  2.1 初始化项目

  创建一个新的 Node.js 项目并初始化:

 mkdir ts-jest-example
  cd ts-jest-example
  npm init -y

2.2 配置 TypeScript

  安装 TypeScript 及相关工具:

npm install typescript @types/node --save-dev

初始化 TypeScript 配置:

 npx tsc --init

修改 tsconfig.json 配置,确保开启以下选项:

  {
    "compilerOptions": {
      "target": "ES2017",
      "module": "commonjs",
      "strict": true,
      "esModuleInterop": true,
      "outDir": "./dist",
      "rootDir": "./src"
    }
  }

创建 src 文件夹,用于存放代码和测试

  2.3 安装 Jest 及相关依赖

  安装 Jest 和 TypeScript 支持插件:

 npm install jest ts-jest @types/jest --save-dev

初始化 Jest 配置:

npx ts-jest config:init

此命令会生成一个 jest.config.js 文件,配置示例如下:

 module.exports = {
    preset: 'ts-jest',
    testEnvironment: 'node',
    rootDir: 'src',
  };

3. 编写测试

  以下以一个简单的函数为例,展示如何编写和测试代码。

  3.1 编写简单的测试用例

  创建文件 src/utils.ts:

 // utils.ts
  export const sum = (a: number, b: number): number => {
    return a + b;
  };

 为 sum 函数编写测试,创建文件 src/utils.test.ts:

 // utils.test.ts
  import { sum } from './utils';
  test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
  });

运行测试:

  npx jest

  输出结果:

 PASS  src/utils.test.ts
  √ adds 1 + 2 to equal 3 (5 ms)

3.2 测试异步代码

  创建一个异步函数 src/asyncUtils.ts:

 // asyncUtils.ts
  export const fetchData = async (): Promise<string> => {
    return new Promise((resolve) => {
      setTimeout(() => resolve('Hello, Jest!'), 1000);
    });
  };

编写测试文件 src/asyncUtils.test.ts:

 // asyncUtils.test.ts
  import { fetchData } from './asyncUtils';
  test('fetchData returns correct data', async () => {
    const data = await fetchData();
    expect(data).toBe('Hello, Jest!');
  });

运行测试:

  npx jest

 3.3 测试接口调用(Mock 示例)

  编写一个调用接口的函数 src/api.ts:

 

// api.ts
  import axios from 'axios';
  export const getUser = async (id: number): Promise<any> => {
    const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
    return response.data;
  };

为 getUser 函数编写测试,使用 Jest Mock:

 // api.test.ts
  import { getUser } from './api';
  import axios from 'axios';
  // Mock axios
  jest.mock('axios');
  const mockedAxios = axios as jest.Mocked<typeof axios>;
  test('fetches user data', async () => {
    const mockUser = { id: 1, name: 'John Doe' };
    mockedAxios.get.mockResolvedValueOnce({ data: mockUser });
    const user = await getUser(1);
    expect(user).toEqual(mockUser);
    expect(mockedAxios.get).toHaveBeenCalledWith('https://jsonplaceholder.typicode.com/users/1');
  });

运行测试并验证 Mock 功能。

  4. 运行与调试

  运行所有测试:

 npx jest

运行单个测试文件:

 npx jest src/utils.test.ts

在调试工具中运行测试(如 VSCode 的调试功能):

  在项目根目录创建 launch.json 文件。

  配置如下:

 {
    "version": "0.2.0",
    "configurations": [
      {
        "type": "node",
        "request": "launch",
        "name": "Debug Jest Tests",
        "program": "${workspaceFolder}/node_modules/.bin/jest",
        "args": ["--runInBand"],
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen"
      }
    ]
  }

 选择配置并开始调试。

  5. 最佳实践

  目录结构建议:

  src:主代码文件夹。

  tests:测试文件夹(可选,适用于大型项目)。

  命名规范:

  测试文件以 .test.ts 或 .spec.ts 结尾。

  与被测试文件放在同一目录下或单独维护测试目录。

  使用 Mock 减少依赖:

  对于外部接口、数据库等不易直接测试的部分,使用 Jest Mock 减少测试依赖。

  确保代码覆盖率:

  添加覆盖率报告:

 npx jest --coverage

 6. 总结

  通过结合 TypeScript 和 Jest,你可以实现类型安全、高质量的单元测试流程。Jest 提供了强大的 Mock 功能和丰富的测试工具,能有效提升开发效率。希望本文的指南和示例能帮助你更好地掌握 Jest 和 TypeScript 的测试方法!

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值