5 cách để viết 1 Flaky test
Mở đầu Trong quá trình phát triển phần mềm, chúng ta muốn đảm bảo tính đúng đắn, chính xác của 1 tính năng đồng thời muốn thích ứng với công việc maintain phát triển mở rộng sau này, code base tốt chỉ là 1 phần, phần còn lại chính là viết Test. Những năm gần đây, các công ty hầu hết đều đưa việc ...
Mở đầu
Trong quá trình phát triển phần mềm, chúng ta muốn đảm bảo tính đúng đắn, chính xác của 1 tính năng đồng thời muốn thích ứng với công việc maintain phát triển mở rộng sau này, code base tốt chỉ là 1 phần, phần còn lại chính là viết Test. Những năm gần đây, các công ty hầu hết đều đưa việc viết Test vào trong quy trình làm việc, không thể phủ nhận là phần trăm coverage function tăng lên rất nhiều. Tuy nhiên, lập trình viên có thể gặp phải một vài vấn đề oái oăm trong quá trình viết test.
Đã bao giờ bạn viết test và chạy pass ở máy mình, nhưng khi push code lên, CI chạy test lại bị fail? Bạn chạy thử lại ở local thì vẫn pass, chạy lại lần nữa thì lại bị fail? (boiroi). Mình đã từng gặp trường hợp như thế mà không hiểu tại sao. Sau khi google thử thì thấy có khá nhiều người cũng gặp trường hợp tương tự khi viết test, và người ta gọi những test như vậy là flaky test (theo cách nói dân dã là test bị failed một cách "hên xui"). Khi project của bạn có tới khoảng 10k tests thì cơ hội gặp phải loại test này sẽ tăng lên rất nhiều. Và chỉ 1 lần gặp phải thôi, việc CI phải build lại sẽ mất rất nhiều thời gian. Bài viết dưới đây sẽ hướng dẫn các bạn một vài cách để viết (hoặc tránh) flaky test.
Các cách để tránh Flaky Test
1. Random factories
# Giả sử email của customer là duy nhất 10.times do Customer.create!(email: Faker::Internet.safe_email) end
Bạn có thấy vấn đề gì ở đây không? Trong đại đa số trường hợp, test này sẽ pass. Nhưng đôi khi, Faker có thể trả về 1 email random mà đã được sử dụng trước đó và tất nhiên, test của bạn sẽ bị crash với lỗi email không unique