単体テスト(Jest)とデータベースキャッシュ(Redis)の問題
やあみんな、私はユニットテスト(Jestを使用)とバンクキャッシュ(Redisを使用)を行っていた、比較的簡単に解決できる問題についてコメントします。
つまり、問題は、特定のテストに合格した場合と合格しなかった場合があるということでした。単独でテストした場合はどうなりますか?
私はすぐにそれがRedisキャッシュであると思いました。それは、私が慣れていたものとは新しく、異なる唯一のものだったからです。
私はすぐにいくつかの可能な解決策を考えました:
- テストが宣言された順序を変更すると、実行の順序も変更され、キャッシュを使用したテストは最後にのみ実行されます(これは機能しましたが、ルートでの問題は解決しませんでした)
- 別のアイデアがLedから生まれました。彼は、CPF(テスト対象のUseCaseペイロードの一部)を以前のテストですでに使用されていたものとは異なるものに変更することを提案しました(これは機能しましたが、解決しませんでしたルートでの問題)
- もう少し調べて、なぜこれが起こったのかを理解してください(根本的な問題を解決してください笑)
それで、グーグルの親で検索をすることで、私はその主題についてもっと見つけました。次のテストを開始する前に、すべてのモックを破棄/リセットする必要があることがわかりました。
最も単純で最も簡単な解決策は、「beforeEach」内の「resetAllMocks」を利用することでした。
describe(‘Check XPTO Use Case’, () => {
beforeEach(() => {
jest.resetAllMocks() // dessa forma aqui
})
it(‘should return ….’, async () => {
// ...
})
})
* 「afterEach」であった可能性もありますが、同じ効果があります。
そうすれば、前のテストでRedisによってキャッシュされていたものはすべて、次のテストで使用できなくなるため、すべてが互いに「分離」されて実行されます。
結局、すべてがうまくいきました:
1つのメモ、'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