Problém s testy jednotek (Jest) a mezipamětí databáze (Redis)
Čau lidi, rád bych se vyjádřil k relativně jednoduchému problému, který jsem provedl testem jednotek (pomocí Jest) as mezipamětí banky (pomocí Redis).
Stručně řečeno, problém byl v tom, že někdy daný test prošel a jindy ne. Co kdybych to testoval izolovaně, příliš prošlo.
Okamžitě jsem usoudil, že je to mezipaměť Redis, protože to byla jediná věc nová a odlišná od toho, na co jsem byl zvyklý.
Pak mě napadlo několik možných řešení:
- Změňte pořadí, ve kterém byly testy deklarovány, takže by se také změnilo pořadí provádění a testy s mezipamětí by se prováděly až jako poslední (to fungovalo, ale problém v kořeni to nevyřešilo)
- Další nápad přišel od společnosti Led, která navrhla změnit CPF (který je součástí předmětného užitečného zatížení UseCase, který má být testován) na jiný, než jaký již byl použit v předchozích testech (fungovalo to, ale také to nevyřešilo problém problém u kořene )
- Prozkoumejte trochu více a pochopte, proč se to stalo (vyřešte problém v kořenu lol)
Když jsem tedy hledal na Google parent, našel jsem na toto téma více. Zjistil jsem, že před zahájením dalšího testu bylo nutné zničit/resetovat všechny makety.
Nejjednodušším a nejpřímějším řešením bylo použití „resetAllMocks“ uvnitř „před každým“:
describe(‘Check XPTO Use Case’, () => {
beforeEach(() => {
jest.resetAllMocks() // dessa forma aqui
})
it(‘should return ….’, async () => {
// ...
})
})
*Mohlo to být také „po každém“, mělo by to stejný účinek.
Tímto způsobem by vše, co bylo uloženo do mezipaměti Redis v předchozím testu, již nebylo k dispozici pro příští test, takže by všechny běžely "izolované" od sebe navzájem.
Nakonec vše dopadlo :
Jedna poznámka, zkusil jsem použít 'jest.clearAllMocks() “ ale nefungovalo to a stále nevím proč, brzy prozkoumám více a pokud ano, zveřejním zde další příspěvek.*
Odkazy, které jsem na toto téma našel:
- 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