1. 10:09 16/10/2026
CHIẾN LƯỢC TESTING TOÀN DIỆN CHO MONOREPO REACT ĐA NỀN TẢNG
MỤC TIÊU
- Đảm bảo chất lượng mã trên cả Web và Mobile.
- Tận dụng chia sẻ logic nghiệp vụ trong monorepo.
- Giảm thiểu flaky test và thời gian chạy CI.
CẤU TRÚC THƯ MỤC TEST
- packages/shared/__tests__ : unit test cho hook, utility, pure function.
- apps/web/__tests__ : integration test cho component React, page, routing.
- apps/mobile/__tests__ : e2e test với Detox cho luồng người dùng trên thiết bị giả lập.
CÔNG CỤ CHỌN
- Jest + React Testing Library cho unit/integration trên Web.
- Detox cho end‑to‑end trên iOS/Android.
- @testing-library/jest-native để dùng cùng API cho React Native.
CẤU HÌNH JEST CHO MONOREPO
- Sử dụng projects trong jest.config.js để chạy riêng từng workspace.
- Thiết lập moduleNameMapper để alias @shared trỏ đến packages/shared/src.
- Bật collectCoverageFrom chỉ cho mã nguồn, loại trừ file cấu hình.
CHẠY TEST SONG SONG TRONG CI
- GitHub Actions matrix: node-version x platform (web, mobile).
- Cache node_modules và detox binary để tăng tốc.
- Chạy unit test trước, chỉ chạy Detox khi unit pass.
XỬ LÝ FLAKY TEST
- Quarantine test thất bại ngẫu nhiên vào file flaky.test.ts.
- Sử dụng retry‑times của Jest (--maxRetries=2) cho unit test.
- Với Detox, bật retryOnFailure và chụp screenshot khi fail.
MẸO THỰC TẾ
- Viết test theo hành vi (behavior) chứ không phải implementation detail.
- Dùng data-testid nhất quán giữa Web và Mobile để dễ migrate.
- Tích hợp Storybook interaction test cho component UI quan trọng.
KẾT LUẬN
Một chiến lược testing rõ ràng, tách biệt unit, integration, e2e và tự động hóa trong CI giúp đội ngũ phát triển tin tưởng khi release song song Web và Mobile từ cùng một monorepo.