sql >> Databasteknik >  >> NoSQL >> Redis

Jest och Redis (enhet testar problem med databascache)

Problem med enhetstester (Jest) och databascache (Redis)

Hej killar, jag ska kommentera ett problem, relativt enkelt att lösa, som jag gjorde enhetstester (med Jest) och med bankcachen (med Redis).

Kort sagt var problemet att ett visst prov ibland godkändes och ibland inte. Tänk om jag testade det isolerat för godkänt.

Jag antog genast att det var Redis-cachen, eftersom det var det enda nya och annorlunda än vad jag var van vid att göra.

Jag tänkte genast på några möjliga lösningar:

  1. Ändra ordningen som testerna deklarerades i, så att exekveringsordningen också skulle ändras och testerna med cachen endast körs sist (detta fungerade men löste inte problemet i roten)
  2. En annan idé kom från Led, som föreslog att ändra CPF (som är en del av UseCase nyttolasten i fråga som ska testas) till en annan än den som redan hade använts i tidigare tester (det fungerade men löste inte heller problem i roten )
  3. Forska lite mer och förstå varför detta hände (lös problemet vid roten lol)

Så när jag sökte på Google förälder hittade jag mer om ämnet. Jag fann att det var nödvändigt att förstöra/återställa alla mockar innan nästa test påbörjades.

Den enklaste och enklaste lösningen var att använda 'resetAllMocks' i en 'beforeEach':

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

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

*Kunde också ha varit en "afterEach", det skulle ha samma effekt.

På så sätt skulle allt som hade cachats av Redis i ett tidigare test inte längre vara tillgängligt för nästa test, så de skulle alla köras "isolerade" från varandra.

Till slut löste sig allt :

En anteckning, jag försökte använda 'jest.clearAllMocks() ' men det fungerade inte och jag vet fortfarande inte varför, snart ska jag undersöka mer och om jag gör det kommer jag att lägga upp ett till inlägg här.*

Länkar jag hittade om ämnet:

  • 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. MongoDB som kötjänst?

  2. MongoDB Ruby Driver 2.5.x problem med skiftlägeskänslighet med värdnamn på replikuppsättningar

  3. Infoga en lista i en annan lista i Redis

  4. Ska jag dela Redis-anslutning mellan filer/moduler?