sql >> Database >  >> NoSQL >> Redis

Jest en Redis (probleem met unit-tests met databasecache)

Probleem met unit-tests (Jest) en databasecache (Redis)

Hallo jongens, ik ga iets zeggen over een probleem, relatief eenvoudig op te lossen, dat ik moest doen met unit-tests (met Jest) en met de bankcache (met Redis).

Kortom, het probleem was dat een bepaalde test de ene keer wel en de andere keer niet slaagde. Wat als ik het ook afzonderlijk heb getest.

Ik nam meteen aan dat het de Redis-cache was, omdat dit het enige nieuwe en andere was dan ik gewend was te doen.

Toen bedacht ik enkele mogelijke oplossingen:

  1. Verander de volgorde waarin de tests zijn gedeclareerd, zodat de volgorde van uitvoering ook wordt gewijzigd en de tests met de cache alleen als laatste worden uitgevoerd (dit werkte maar loste het probleem niet bij de root op)
  2. Een ander idee kwam van Led, die voorstelde om de CPF (die deel uitmaakt van de UseCase-payload in kwestie die moet worden getest) te wijzigen in een ander idee dan wat al in eerdere tests was gebruikt (het werkte maar loste ook niet de probleem bij de wortel )
  3. Onderzoek wat meer en begrijp waarom dit gebeurde (los het probleem bij de wortel op lol)

Dus toen ik op Google ouder zocht, vond ik meer over het onderwerp. Ik vond dat het nodig was om alle mocks te vernietigen/resetten voordat de volgende test werd gestart.

De eenvoudigste en meest rechttoe rechtaan oplossing was om gebruik te maken van 'resetAllMocks' in een 'beforeEach':

 describe(‘Check XPTO Use Case’, () => {
   beforeEach(() => {
     jest.resetAllMocks() // dessa forma aqui
   })

   it(‘should return ….’, async () => {
   // ...
   })
})

*Het had ook een 'afterEach' kunnen zijn, het zou hetzelfde effect hebben.

Op die manier zou alles wat in een eerdere test door Redis in de cache was opgeslagen, niet langer beschikbaar zijn voor de volgende test, zodat ze allemaal "geïsoleerd" van elkaar zouden werken.

Uiteindelijk is alles gelukt :

Eén opmerking, ik heb geprobeerd 'jest.clearAllMocks() . te gebruiken ' maar het werkte niet en ik weet nog steeds niet waarom, binnenkort zal ik meer onderzoeken en als ik dat doe, zal ik hier nog een bericht plaatsen.*

Links die ik over dit onderwerp heb gevonden:

  • 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. Zes cruciale componenten van succesvol databeheer

  2. lente data mongodb id veldtoewijzing

  3. GenericJackson2JsonRedisSerializer Negeer klasse en attribuut

  4. Verschil tussen StackExchange.Redis en ServiceStack.Redis