Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jest i Redis (problem testów jednostkowych z pamięcią podręczną bazy danych)

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:

  1. 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)
  2. 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 )
  3. 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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 6 kluczowych wskaźników monitorowania Redis, które musisz obserwować

  2. chcesz uruchomić redis-server w tle bez przerwy

  3. Czy to dobry przypadek użycia dla Redis w interfejsie API REST ServiceStack?

  4. docker-compose:połączenie odrzucone między kontenerami, ale usługa dostępna z hosta

  5. Znajdowanie kluczy za pomocą symboli wieloznacznych