Thiết Lập Kiểm Thử Đơn Vị Hiệu Quả Cho Dự Án TypeScript Với Jest

Dự án la-velada-web-oficial gặp phải thách thức trong việc kiểm thử do cấu hình phức tạp và tương thích TypeScript. Hướng dẫn này tập trung vào triển khai hệ thống kiểm thử toàn diện bằng Jest, bao gồm cấu hình môi trường, viết case kiểm thử, và tích hợp pipeline CI.

Cài Đặt Thư Viện Cần Thiết

Sử dụng pnpm để cài đặt các package phát triển:

{
  "devDependencies": {
    "jest": "^30.2.0",
    "ts-jest": "^29.4.5",
    "@types/jest": "^30.0.0"
  }
}

Lệnh cài đặt:

pnpm add -D jest ts-jest @types/jest

Cấu Hình Jest Cho TypeScript

Tạo file jtest.config.mjs tại thư mục gốc:

export default {
  preset: 'ts-jest',
  testEnvironment: 'node',
  rootDir: './src',
  testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.ts$',
  transform: {
    '^.+\\.tsx?$': ['ts-jest', { 
      tsconfig: 'tsconfig.test.json'
    }]
  }
}

Tích Hợp Lệnh Kiểm Thử

Cập nhật phần scripts trong package.json:

{
  "scripts": {
    "kiem-thu": "jest",
    "kiem-thu-theo-doi": "jest --watch",
    "bao-phu": "jest --coverage --coverage-reporters=html"
  }
}

Ví Dụ Thực Tế: Module Tính Toán Dự Đoán

File nguồn src/utils/dudoan.ts:

export const tínhTỷLệDựĐoán = (thắng: number, thua: number): number => {
  return Math.round((thắng / (thắng + thua)) * 100);
};

File kiểm thử src/utils/dudoan.test.ts:

import { tínhTỷLệDựĐoán } from './dudoan';

describe('Module Tính Toán Dự Đoán', () => {
  it('Xử lý tỷ lệ 30-70 chính xác', () => {
    expect(tínhTỷLệDựĐoán(30, 70)).toBe(30);
  });

  it('Xác nhận tỷ lệ 50-50', () => {
    expect(tínhTỷLệDựĐoán(50, 50)).toBe(50);
  });

  it('Loại bỏ trường hợp tổng bằng 0', () => {
    expect(tínhTỷLệDựĐoán(0, 0)).toBe(0);
  });
});

Chạy Kiểm Thử Và Phân Tích Kết Quả

Kích hoạt kiểm thử qua lệnh:

pnpm kieếm-thử

Đầu ra mẫu:

✓ Xử lý tỷ lệ 30-70 chính xác (3ms)
✓ Xác nhận tỷ lệ 50-50 (1ms)
✓ Loại bỏ trường hợp tổng bằng 0 (0ms)

Tích Hợp Pipeline CI

Cập nhật GitHub Actions workflow:

jobs:
  unit-test:
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v2
      - run: pnpm install
      - run: pnpm bao-phu
    env:
      CI: true

Giải Quyết Vấn Đề Thường Gặp

  • Lỗi kiểu dữ liệu: Đảm bảo phiên bản ts-jest tương thích với cấu hình TypeScript
  • Timeout kiểm thử: Chỉ định thời gian tối đa bằng jest.setTimeout(15000)
  • Module không tìm thấy: Kiểm tra đường dẫn trong moduleNameMapper của Jest config

Thẻ: jest typescript ci-pipelines unit-testing github-actions

Đăng vào ngày 20 tháng 5 lúc 13:03