Thường thì Cypress
rất tuyệt vời, cho phép một tên dev đóng giả làm tester và giảm thời gian quỳ lạy để tester kiểm tra lại các features cũ đã chạy sau mỗi lần tên dev kia refactor. Người ta gọi đó là regression. Món quà mà Chúa (hay team Cypress đã đem đến cho Trái Đất).
Ngoại trừ có một vấn đề nhỏ, đó là chạy cypress ở máy rất tốn RAM và gây chậm cho tác vụ khác. Nhưng ko sao nếu như người anh em devops trong team set up giúp bạn Github actions chỉ chuyển để chạy cypress thì đây ko là vấn đề. Giờ thì chỉ cần đẩy code lên nhánh đặt tên thật đúng theo kiểu e2e/*
và ko ai cần quan tâm đến việc cypress đang chạy ra sao.
Tuy nhiên đây wait
mới là nỗi đau đích thực.
Giả sử trong 1 test case có 4 http network call. Bạn kỳ vọng rằng mỗi lần chạy kết quả sẽ ổn định và nếu test case có fail thì chỉ có thể là sự ngớ ngẩn từ refactor code của bạn gây ra. Sự thật lại không phải thế. Nếu test case này được chạy 5 lần thì rất có thể 3 lần fail sẽ ở 1 trong 4 http network call kia và mỗi lần là 1 cái method wait
sẽ bắt request khác nhau. Tuy nhiên thì bạn pass được 2 lần, như vậy có đủ đáng tin rằng đoạn code của bạn hoạt động đúng???
Okay lần này cẩn thận hơn. Bạn chỉ cài method wait
cho request cuối cùng trong 4 requests nếu như bạn đang có nhiều requests. Bạn mong rằng chỉ là sau khi request cuối cùng hoàn thành thì cypress mới chạy code tiếp. Thực tế là cypress còn ko bắt được request này và dòng code sau wait
luôn được chạy thiếu đi kết quả của request mà bạn mong muốn. Test case của bạn lại fail và bạn ko bao giờ thực sự tự tin với code refactor của mình
Lắm khi tôi nghĩ công debug test cases có khi còn lớn hơn nhiều công refactor code và test tay cộng lại! Nếu có thời gian tôi nên tái hiện và file 1 cái issue cho team cypress.