TypeScript 测试:框架与工具概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 测试:现代框架与工具概览



TypeScript 是 JavaScript 的强类型超集,在现代 Web 开发中被广泛使用。然而,类型检查本身并不能保证没有逻辑错误。为了确保代码质量,需要进行合理的测试。在本文中,我们将介绍用于测试 TypeScript 应用程序的主要框架和工具、它们的特点以及使用示例。



为什么要测试 TypeScript 代码?

尽管 TypeScript 在编译阶段会检查类型,但它无法防止运行时错误、不正确的业务逻辑或回归问题。测试有助于:

  • 在代码进入生产环境之前发现错误;
  • 记录函数和模块的行为;
  • 简化代码重构和维护;
  • 通过自动化检查加速开发过程。


流行的 TypeScript 测试框架



1. Jest — 通用选择

Jest 是最流行的框架,由 Facebook 创建。它通过 ts-jest 包或 Babel 配置原生支持 TypeScript。Jest 包含测试运行器、断言库、模拟功能和覆盖率报告。



安装与配置:

npm install --save-dev jest ts-jest @types/jestnpx ts-jest config:init


加法函数的单元测试示例:

// sum.tsexport function sum(a: number, b: number): number {  return a + b;}

// sum.test.tsimport { sum } from './sum';

describe('sum function', () => { test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });

test('adds negative numbers', () => { expect(sum(-1, -2)).toBe(-3); });});


2. Vitest — Vite 项目的快速替代方案

Vitest 是一个现代框架,使用 Vite 进行构建。它与 Jest API 兼容,但由于原生支持 ES 模块和 HMR,运行速度显著更快。非常适合 Vue、React 或 Svelte 项目。



配置示例:

// vitest.config.tsimport { defineConfig } from 'vitest/config';

export default defineConfig({ test: { globals: true, environment: 'node', },});


使用 describe/it 的测试:

import { describe, it, expect } from 'vitest';

function multiply(a: number, b: number): number { return a * b;}

describe('multiply', () => { it('should multiply two numbers', () => { expect(multiply(3, 4)).toBe(12); });});


3. Mocha + Chai — 灵活的经典组合

Mocha 是一个灵活的测试运行器,通常与断言库 Chai 配合使用。对于 TypeScript,需要额外安装 ts-node 和 @types/mocha。Mocha 提供了大量插件和自定义选项。



示例:

import { expect } from 'chai';

function greet(name: string): string { return `Hello, ${name}!`;}

describe('greet', () => { it('should return a greeting', () => { expect(greet('Alex')).to.equal('Hello, Alex!'); });});


端到端(E2E)测试工具



4. Playwright — 现代 E2E 工具

Playwright 由 Microsoft 开发,原生支持 TypeScript,允许测试 Chromium、Firefox 和 WebKit。它可以处理网络请求、模拟移动设备并截图。



安装:

npm init playwright@latest


检查页面标题的测试示例:

import { test, expect } from '@playwright/te                    

推荐