0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Cách kiểm tra Spinner với findByRole trong Jest và Chakra UI

Đăng vào 7 tháng trước

• 3 phút đọc

Chủ đề:

#react#test#jest

Giới thiệu

Khi viết các bài kiểm tra với Jest, tôi đã gặp phải lỗi "Không tìm thấy spinner đang tải." Bài viết này sẽ tóm tắt tình huống và cách giải quyết vấn đề này, giúp bạn hiểu rõ hơn về việc kiểm tra các spinner trong ứng dụng React sử dụng Chakra UI.

Tình huống

Trong quá trình phát triển một ứng dụng ghi chú học tập sử dụng React, Vite và Supabase, tôi đã cố gắng mô phỏng client Supabase với Jest. Tôi đã sao chép mã sản xuất từ utils/supabase.ts và tạo một file mô phỏng tại mocks/utils/supabase.ts. Dưới đây là nội dung tôi đã viết:

typescript Copy
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL as string;
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY as string;

Tuy nhiên, Jest không hiểu được import.meta.env của Vite.

Vấn đề

import.meta.env chỉ có hiệu lực trong môi trường xây dựng của Vite. Nó không được hỗ trợ trong Jest (môi trường Node.js + ts-jest), vì vậy TypeScript không được hỗ trợ và dẫn đến lỗi biên dịch.

Giải pháp

Để khắc phục vấn đề này, bạn nên sử dụng process.env cho các mô phỏng chỉ trong bài kiểm tra. Ngoài ra, hãy tạo file .env.test và tải nó khi Jest chạy. Dưới đây là đoạn mã mới mà bạn cần sử dụng:

typescript Copy
const supabaseUrl = process.env.VITE_SUPABASE_URL || "http://localhost:54321";
const supabaseAnonKey = process.env.VITE_SUPABASE_ANON_KEY || "mock-anon-key";

Tóm tắt

  • Việc sử dụng import.meta.env trong một mô phỏng Supabase sẽ dẫn đến lỗi trong Jest. Giải pháp: Chuyển sang process.env để đảm bảo rằng các biến môi trường có thể được sử dụng trong môi trường kiểm tra.

Thực hành tốt nhất

  • Kiểm tra các biến môi trường: Đảm bảo rằng bạn có file .env.test được cấu hình đúng để Jest có thể truy cập.
  • Sử dụng các giá trị mặc định: Khi sử dụng process.env, hãy cung cấp các giá trị mặc định để tránh lỗi khi biến môi trường không được thiết lập.

Cạm bẫy thường gặp

  • Sử dụng sai biến môi trường: Đảm bảo rằng bạn đang sử dụng đúng tên biến môi trường để tránh nhầm lẫn và lỗi không mong muốn.
  • Quên tạo file .env.test: Rất dễ để quên tạo file này, dẫn đến việc bài kiểm tra không thể chạy thành công.

Mẹo hiệu suất

  • Giảm thiểu thời gian kiểm tra: Sử dụng các mô phỏng thay vì gọi trực tiếp đến API thật để tăng tốc độ kiểm tra.
  • Thực hiện kiểm tra đồng thời: Nếu có thể, hãy chạy các bài kiểm tra đồng thời để tiết kiệm thời gian.

Khắc phục sự cố

  • Không tìm thấy biến môi trường: Nếu bạn gặp lỗi "Không tìm thấy biến môi trường", hãy kiểm tra xem file .env.test có tồn tại và được cấu hình chính xác hay không.
  • Lỗi biên dịch TypeScript: Nếu gặp lỗi biên dịch, hãy kiểm tra xem bạn có đang sử dụng đúng cú pháp và biến môi trường không.

FAQ

  1. Tại sao import.meta.env không hoạt động trong Jest?
    import.meta.env chỉ hoạt động trong môi trường xây dựng của Vite, không hỗ trợ trong môi trường Node.js.

  2. Làm thế nào để kiểm tra spinner trong Chakra UI?
    Bạn có thể sử dụng findByRole để tìm kiếm spinner và xác nhận tính đúng đắn của nó trong bài kiểm tra.

Kết luận

Việc kiểm tra các spinner trong ứng dụng React sử dụng Chakra UI có thể gặp một số thách thức, nhưng với một số điều chỉnh nhỏ, bạn có thể dễ dàng giải quyết vấn đề này. Hãy đảm bảo rằng bạn đang sử dụng process.env thay vì import.meta.env để tránh các lỗi không cần thiết trong bài kiểm tra Jest của mình. Đừng quên kiểm tra các biến môi trường và cung cấp giá trị mặc định để có được trải nghiệm kiểm tra tốt nhất. Nếu bạn có câu hỏi nào khác, hãy để lại ý kiến của bạn dưới bài viết này!

Tài nguyên tham khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào