sql >> Database teknologi >  >> NoSQL >> Redis

Jest og Redis (enhed tester problem med databasecache)

Problem med enhedstests (Jest) og databasecache (Redis)

Hej gutter, jeg har tænkt mig at kommentere et problem, som er relativt nemt at løse, som jeg havde lavet enhedstests (ved hjælp af Jest) og med bankcachen (ved hjælp af Redis).

Kort sagt var problemet, at en given test til tider bestod og andre gange ikke. Hvad hvis jeg testede det isoleret for bestået.

Jeg gik straks ud fra, at det var Redis-cachen, da det var det eneste nye og anderledes end det, jeg var vant til at lave.

Så tænkte jeg på nogle mulige løsninger:

  1. Ændre rækkefølgen, som testene blev erklæret i, så rækkefølgen af ​​udførelsen også ville blive ændret, og testene med cachen kun blev udført sidst (dette virkede, men løste ikke problemet ved roden)
  2. En anden idé kom fra Led, som foreslog at ændre CPF (som er en del af den pågældende UseCase-nyttelast, der skal testes) til en anden end den, der allerede var blevet brugt i tidligere test (det virkede, men løste heller ikke problem ved roden )
  3. Undersøg lidt mere og forstå hvorfor dette skete (løs problemet ved roden lol)

Så ved at søge på Google-forælder fandt jeg mere om emnet. Jeg fandt ud af, at det var nødvendigt at ødelægge/nulstille alle mocks, før den næste test blev startet.

Den enkleste og mest ligetil løsning var at gøre brug af 'resetAllMocks' inde i en 'beforeEach':

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

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

*Kunne også have været en 'afterEach', det ville have samme effekt.

På den måde ville alt, der var blevet cachelagret af Redis i en tidligere test, ikke længere være tilgængeligt for den næste test, så de ville alle køre "isoleret" fra hinanden.

Til sidst lykkedes alt :

En bemærkning, jeg prøvede at bruge 'jest.clearAllMocks() ' men det virkede ikke, og jeg ved stadig ikke hvorfor, snart vil jeg undersøge mere, og hvis jeg gør det, vil jeg poste endnu et indlæg her.*

Links jeg fandt om emnet:

  • 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. PHP Startup Kan ikke indlæse dynamisk bibliotek php_mongo.dll

  2. Forespørgsel på Mongoid Hash Field

  3. Hvordan kører man hukommelsesanalyse på AWS ElastiCache?

  4. Node Js:Redis-jobbet er ikke afsluttet efter at have afsluttet sin opgave