Проблем с модулните тестове (Jest) и кеша на базата данни (Redis)
Здравейте, момчета, ще коментирам проблем, сравнително лесен за решаване, който правех единични тестове (с помощта на Jest) и с банковия кеш (с помощта на Redis).
Накратко, проблемът беше, че понякога даден тест минаваше, а друг път не. Ами ако го тествах изолирано, също мина.
Веднага предположих, че е кешът на Redis, тъй като това беше единственото нещо ново и различно от това, което бях свикнал да правя.
Тогава се сетих за някои възможни решения:
- Променете реда, в който са декларирани тестовете, така че редът на изпълнение също ще бъде променен и тестовете с кеша ще се изпълняват само последни (това работи, но не реши проблема в корена)
- Друга идея дойде от Led, който предложи промяна на CPF (който е част от въпросния полезен товар на UseCase, който трябва да бъде тестван) с различен от този, който вече е бил използван в предишни тестове (работи, но също така не реши проблема проблем в основата )
- Проучете малко повече и разберете защо това се случва (решете проблема в корена, хаха)
Така че, правейки търсене в 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