如何使用 TypeScript 集成 Jest/Supertest/ESLint/Express?

这篇文章将介绍如何使用 TypeScript 集成 Jest/Supertest/ESLint/Express,实现在 TypeScript 环境下进行单元测试、集成测试以及代码检查的功能。本文将详细介绍每个工具的作用,以及如何安装和使用。

TypeScript 简介

TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的一个超集,为 JavaScript 添加了静态类型和其他一些特性。TypeScript 可以编译成纯 JavaScript,可以在任何支持 JavaScript 的环境中运行。TypeScript 在前端领域得到了广泛使用,它是 Angular 框架的官方开发语言,也是 React 和 Vue 等框架的推荐开发语言。TypeScript 可以帮助我们在开发过程中早期识别错误,并且提供代码提示和自动补全的功能,大大提升了开发效率。

Jest 简介

Jest 是 Facebook 开源的一款 JavaScript 测试框架,它提供了一组工具来测试 JavaScript 代码。Jest 可以轻松地编写单元测试、集成测试以及断言库,它还有一个强大的"mock"功能,可以模拟函数调用、模拟 HTTP 请求等等。Jest 能够帮助我们编写高效、简洁、可靠的测试用例,并且可以与 TypeScript 紧密集成,提供类型安全的测试。

Supertest 简介

Supertest 是一个用来测试 HTTP 接口的模块,它基于 Superagent 封装,可以轻松地模拟 HTTP 请求,并断言 HTTP 响应的结果。Supertest 支持链式调用,可以对请求进行配置,并对响应进行断言,同时也可以支持 Cookie、Session 等状态管理方案。

ESLint 简介

ESLint 是一个开源的 JavaScript 代码检查工具,它可以识别多种不规范的代码风格,并提供规则来强制执行更一致的代码风格。ESLint 能够帮助开发者发现潜在的 bug、增强可读性、规范团队的代码风格。

Express 简介

Express 是 Node.js 中流行的 Web 应用程序框架,它提供了一组简单的API,可以轻松地创建 Web 服务器和处理 HTTP 请求和响应。Express 可以集成 HTTP, HTTPS, WebSocket 等协议,还提供了一些非常有用的中间件,如 body-parser、cookie-parser等。

安装环境

在开始集成 Jest/Supertest/ESLint/Express 前,需要安装以下环境:

  1. Node.js(版本>=10.13.0)

在命令行中输入 node -v,如果能够输出 node 版本号,则表示已安装成功。

  1. TypeScript

在命令行中安装 TypeScript,输入以下命令:

npm install -g typescript
  1. eslint(可选)

在命令行中安装 ESLint,输入以下命令:

npm install -g eslint

集成流程

在开始集成 Jest/Supertest/ESLint/Express 前,我们需要先创建一个 TypeScript 项目,并且在项目中添加 Express 应用,接下来我们将详细介绍如何集成 Jest/Supertest/ESLint/Express

创建项目

首先,我们需要先创建一个 TypeScript 项目,可以使用以下命令:

mkdir my-app && cd my-app
tsc --init

通过以上命令,我们将创建一个名为 my-app 的项目,并且初始化 TypeScript 配置文件 tsconfig.json。

添加 Express 应用

在 my-app 项目中,我们需要安装 Express 库,并且创建一个简单的 Express 应用。可以使用以下命令:

npm install express

在项目根目录下创建一个名为 app.ts 的文件,输入以下代码:

import express from 'express';

const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

export default app;

通过以上代码,我们创建了一个基于 Express 库的简单应用,监听3000端口。

集成 Jest/Supertest

接下来,我们将在 my-app 项目中添加 Jest/Supertest 相关库,并编写单元测试和集成测试。

  1. 安装 Jest/Supertest 库

在项目根目录下安装以下依赖:

npm install jest ts-jest supertest @types/jest @types/supertest -D

其中:

  • jest:Jest 测试框架
  • ts-jest:Jest 的 TypeScript 支持
  • supertest:HTTP 请求测试工具
  • @types/jest:Jest 的类型定义
  • @types/supertest:Supertest 的类型定义
  1. 配置 Jest

在 my-app 项目中创建一个名为 jest.config.js 的文件,输入以下代码:

module.exports = {
  roots: ['<rootDir>/src'],
  testMatch: ['**/__tests__/**/*.+(ts|js)', '**/?(*.)+(spec|test).+(ts|js)'],
  transform: {
    '^.+\\.(ts|tsx)$': 'ts-jest'
  },
  moduleNameMapper: {
    '^@/(.*)': '<rootDir>/src/$1'
  },
  preset: 'ts-jest',
  testEnvironment: 'node'
};

以上配置文件用于配置 Jest 测试框架的相关配置。其中:

  • roots:指定 Jest 测试文件的根目录
  • testMatch:指定 Jest 测试文件的匹配规则
  • transform:使用 ts-jest 来转换 TypeScript 文件
  • moduleNameMapper:将 @ 映射为项目根目录的 src 目录
  • preset:使用 ts-jest 预置配置
  • testEnvironment:测试运行在 node 环境下
  1. 编写单元测试

在 src 目录下创建一个名为 app.test.ts 的文件,输入以下代码:

import request from 'supertest';
import app from '@/app';

describe('GET /', () => {
  it('should return 200 OK', async () => {
    const res = await request(app).get('/');
    expect(res.status).toBe(200);
  });

  it('should return "Hello World!"', async () => {
    const res = await request(app).get('/');
    expect(res.text).toEqual('Hello World!');
  });
});

以上代码用于测试 HTTP GET 请求的返回结果,其中:

  • describe:描述测试内容
  • it:测试用例
  • request:Supertest 提供的测试请求对象
  • app:导入的 Express 应用
  1. 编写集成测试

在 test 目录下创建一个名为 app.integration.test.ts 的文件,输入以下代码:

import request from 'supertest';
import app from '@/app';

describe('GET /api/timestamp', () => {
  it('should check timestamp', async () => {
    const res = await request(app).get('/api/timestamp');
    expect(res.status).toBe(200);
    expect(res.body).toHaveProperty('timestamp');
  });
});

以上代码用于测试 /api/timestamp 接口的返回结果。

  1. 运行测试

在 package.json 文件中添加 Jest 测试脚本:

"scripts": {
  "test": "jest"
},

运行以下命令,进行单元测试和集成测试:

npm run test

至此,我们已成功集成了 Jest/Supertest,实现了单元测试和集成测试的功能。

集成 ESLint

在 my-app 项目中集成 ESLint,可以帮助我们规范代码风格,并避免一些常见的错误。

  1. 安装 ESLint

在项目根目录下安装以下依赖:

npm install eslint eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-standard -D

其中,以上依赖项用于配置 ESLint。

  1. 初始化 ESLint

在项目根目录下初始化 ESLint 配置文件,使用以下命令:

eslint --init

根据提示选择相关配置内容,最终生成 .eslintrc.js 配置文件。

  1. 配置 ESLint

在 .eslintrc.js 文件中,可以设置不同相关规则。可以使用以下规则:

module.exports = {
  env: {
    es2021: true,
    node: true,
  },
  extends: [
    'standard'
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 12,
    sourceType: 'module'
  },
  plugins: [
    '@typescript-eslint'
  ],
  rules: {
    indent: ['error', 2],
    semi: ['error', 'always'],
    quotes: ['error', 'single'],
    'comma-dangle': ['error', 'never'],
    'space-before-function-paren': ['error', 'never']
  },
  overrides: [
    {
      files: ['*.ts'],
      rules: {
        '@typescript-eslint/explicit-function-return-type': ['off', {
          allowExpressions: true
        }]
      }
    }
  ]
};

以上配置规则是用于 TypeScript 项目中的,其中:

  • env:指定环境
  • extends:使用标准规则
  • parser:使用 TypeScript 解析器
  • rules:配置静态检查规则
  • overrides:配置 TypeScript 解析规则
  1. 运行 ESLint

在 package.json 文件中添加 ESLint 检查脚本:

"scripts": {
  "lint": "eslint 'src/**/*.{ts,js}'"
},

运行以下命令,进行代码检查:

npm run lint

至此,我们便成功地集成了 ESLint,实现了静态代码检查的功能。

总结

在 TypeScript 项目中集成 Jest/Supertest/ESLint/Express,可以帮助我们提高开发效率,提升代码质量。本文详细介绍了每个工具的作用、安装及配置方式,希望可以对开发者们有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b4ad1badd4f0e0ffd8de70