Redis
 sql >> база данни >  >> NoSQL >> Redis

Jest и Redis (проблем с модулни тестове с кеша на базата данни)

Проблем с модулните тестове (Jest) и кеша на базата данни (Redis)

Здравейте, момчета, ще коментирам проблем, сравнително лесен за решаване, който правех единични тестове (с помощта на Jest) и с банковия кеш (с помощта на Redis).

Накратко, проблемът беше, че понякога даден тест минаваше, а друг път не. Ами ако го тествах изолирано, също мина.

Веднага предположих, че е кешът на Redis, тъй като това беше единственото нещо ново и различно от това, което бях свикнал да правя.

Тогава се сетих за някои възможни решения:

  1. Променете реда, в който са декларирани тестовете, така че редът на изпълнение също ще бъде променен и тестовете с кеша ще се изпълняват само последни (това работи, но не реши проблема в корена)
  2. Друга идея дойде от Led, който предложи промяна на CPF (който е част от въпросния полезен товар на UseCase, който трябва да бъде тестван) с различен от този, който вече е бил използван в предишни тестове (работи, но също така не реши проблема проблем в основата )
  3. Проучете малко повече и разберете защо това се случва (решете проблема в корена, хаха)

Така че, правейки търсене в Google родител, намерих повече по темата. Открих, че е необходимо да се унищожат/нулират всички подигравки, преди да започне следващият тест.

Най-простото и лесно решение беше да се използва 'resetAllMocks' вътре в 'beforeEach':

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

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

*Може да е и „afterEach“, ще има същия ефект.

По този начин всичко, което е било кеширано от Redis в предишен тест, вече няма да бъде достъпно за следващия тест, така че всички те ще работят „изолирано“ един от друг.

В крайна сметка всичко се получи :

Една забележка, опитах да използвам 'jest.clearAllMocks() ' но не проработи и все още не знам защо, скоро ще проуча повече и ако го направя, ще публикувам друга публикация тук.*

Връзки, които намерих по темата:

  • 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. Redis zrevrangebyscore, сортиране, различно от лексикографския ред

  2. Постоянен обект на Python в паметта за nginx/uwsgi сървър

  3. Да внедря ли сериализиране и десериализиране на NodesJS + Passport + RedisStore?

  4. Как мога да внедря тази единична разпределена опашка с паралелност във всяка MQ платформа?

  5. Как списъците на Redis могат да се използват за внедряване на чат система?