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
moduleNameMappercủa Jest config