Problem z testami jednostkowymi (Jest) i pamięcią podręczną bazy danych (Redis)
Hej chłopaki, zamierzam skomentować problem, stosunkowo prosty do rozwiązania, który musiałem wykonać wykonując testy jednostkowe (przy użyciu Jest) oraz z pamięcią podręczną banku (przy użyciu Redis).
Krótko mówiąc, problem polegał na tym, że raz dany test zdał, a innym razem nie. Co jeśli testowałem to w izolacji zbyt dobrze.
Od razu założyłem, że to pamięć podręczna Redis, ponieważ była to jedyna rzecz nowa i inna od tego, do czego byłem przyzwyczajony.
Potem pomyślałem o kilku możliwych rozwiązaniach:
- Zmień kolejność, w jakiej testy zostały zadeklarowane, tak aby kolejność wykonywania również uległa zmianie, a testy z pamięcią podręczną byłyby wykonywane dopiero jako ostatnie (to zadziałało, ale nie rozwiązało problemu w katalogu głównym)
- Inny pomysł przyszedł od Led, który zasugerował zmianę CPF (który jest częścią badanego ładunku UseCase) na inny niż ten, który był już używany w poprzednich testach (działało, ale również nie rozwiązywało problemu problem u źródła )
- Poszukaj trochę więcej i zrozum, dlaczego tak się dzieje (rozwiąż problem w głównym lol)
Więc robiąc wyszukiwanie w Google rodzic znalazłem więcej na ten temat. Stwierdziłem, że konieczne było zniszczenie/zresetowanie wszystkich makiet przed rozpoczęciem następnego testu.
Najprostszym i najprostszym rozwiązaniem było użycie „resetAllMocks” wewnątrz „beforeEach” :
describe(‘Check XPTO Use Case’, () => {
beforeEach(() => {
jest.resetAllMocks() // dessa forma aqui
})
it(‘should return ….’, async () => {
// ...
})
})
*Mógłby też być „afterEach”, miałby taki sam efekt.
W ten sposób wszystko, co zostało zapisane w pamięci podręcznej przez Redis w poprzednim teście, nie będzie już dostępne w następnym teście, więc wszystkie będą działać „odizolowane” od siebie.
W końcu wszystko się udało :
Jedna uwaga, próbowałem użyć „jest.clearAllMocks() „ale to nie zadziałało i nadal nie wiem dlaczego, wkrótce poszukam więcej, a jeśli to zrobię, opublikuję tutaj kolejny post.*
Linki, które znalazłem na ten temat:
- 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