Sự cố với các bài kiểm tra đơn vị (Jest) và bộ đệm cơ sở dữ liệu (Redis)
Xin chào các bạn, tôi sẽ nhận xét về một vấn đề, tương đối đơn giản để giải quyết, mà tôi đã thực hiện các bài kiểm tra đơn vị (sử dụng Jest) và với bộ đệm ẩn ngân hàng (sử dụng Redis).
Nói tóm lại, vấn đề là có lúc một bài kiểm tra nhất định đã vượt qua và lúc khác thì không. Điều gì sẽ xảy ra nếu tôi kiểm tra nó một cách riêng lẻ cũng không đạt.
Tôi ngay lập tức cho rằng đó là bộ nhớ cache của Redis, vì nó là thứ duy nhất mới và khác với những gì tôi thường làm.
Sau đó, tôi nghĩ đến một số giải pháp khả thi:
- Thay đổi thứ tự mà các bài kiểm tra được khai báo, do đó, thứ tự thực hiện cũng sẽ được thay đổi và các bài kiểm tra với bộ nhớ cache sẽ chỉ được thực hiện sau cùng (cách này hoạt động nhưng không giải quyết được vấn đề tận gốc)
- Một ý tưởng khác đến từ Led, người đã đề xuất thay đổi CPF (là một phần của tải trọng UseCase đang được đề cập để kiểm tra) thành một ý tưởng khác với những gì đã được sử dụng trong các thử nghiệm trước đó (nó hoạt động nhưng cũng không giải quyết được vấn đề tận gốc)
- Nghiên cứu thêm một chút và hiểu tại sao điều này lại xảy ra (giải quyết vấn đề ở gốc rễ)
Vì vậy, thực hiện một tìm kiếm trên Google cha mẹ, tôi đã tìm thấy nhiều hơn về chủ đề này. Tôi thấy rằng cần phải phá hủy / đặt lại tất cả các mô hình trước khi bắt đầu thử nghiệm tiếp theo.
Giải pháp đơn giản và dễ hiểu nhất là sử dụng 'resetAllMocks' bên trong 'beforeEach':
describe(‘Check XPTO Use Case’, () => {
beforeEach(() => {
jest.resetAllMocks() // dessa forma aqui
})
it(‘should return ….’, async () => {
// ...
})
})
* Cũng có thể là 'afterEach', nó sẽ có tác dụng tương tự.
Bằng cách đó, mọi thứ đã được Redis lưu vào bộ nhớ đệm trong thử nghiệm trước sẽ không còn khả dụng cho thử nghiệm tiếp theo, vì vậy tất cả chúng sẽ chạy "cách ly" với nhau.
Cuối cùng thì mọi thứ đã ổn thỏa:
Một lưu ý, tôi đã thử sử dụng 'jest.clearAllMocks () 'nhưng nó không hoạt động và tôi vẫn không biết tại sao, tôi sẽ sớm nghiên cứu thêm và nếu có, tôi sẽ đăng một bài khác ở đây. *
Các liên kết tôi tìm thấy về chủ đề này:
- https://stackoverflow.com/questions/69869063/how-to-clean-up-reset-redis-mock-in-an-express-jest-test
- https://jestjs.io/pt-BR/docs/jest-object#jestresetallmocks