यूनिट परीक्षण (जेस्ट) और डेटाबेस कैश (रेडिस) के साथ समस्या
हे दोस्तों, मैं एक समस्या पर टिप्पणी करने जा रहा हूं, जिसे हल करना अपेक्षाकृत आसान है, कि मैंने यूनिट परीक्षण (जेस्ट का उपयोग करके) और बैंक कैश (रेडिस का उपयोग करके) किया था।
संक्षेप में, समस्या यह थी कि कभी-कभी दी गई परीक्षा उत्तीर्ण हो जाती थी और कभी-कभी नहीं। क्या होगा अगर मैंने इसे अलग-थलग करके परीक्षण किया तो भी पास हो गया।
मैंने तुरंत मान लिया कि यह रेडिस कैश था, क्योंकि यह केवल एक नई चीज थी और जो मैं करता था उससे अलग था।
तब मैंने कुछ संभावित समाधानों के बारे में सोचा:
- उस क्रम को बदलें जिसमें परीक्षण घोषित किए गए थे, इसलिए निष्पादन का क्रम भी बदल दिया जाएगा और कैश के साथ परीक्षण केवल अंतिम निष्पादित किए जाएंगे (यह काम किया लेकिन जड़ पर समस्या का समाधान नहीं हुआ)
- एक और विचार लेड से आया, जिसने सीपीएफ को बदलने का सुझाव दिया (जो कि परीक्षण के लिए यूज़केस पेलोड का हिस्सा है) जो पिछले परीक्षणों में पहले से ही इस्तेमाल किया गया था (इसने काम किया लेकिन हल नहीं किया) समस्या जड़ में है)
- थोड़ा और शोध करें और समझें कि ऐसा क्यों हो रहा था (समस्या को जड़ से हल करें)
इसलिए Google माता-पिता पर खोज करने पर मुझे इस विषय पर और अधिक जानकारी मिली। मैंने पाया कि अगला परीक्षण शुरू होने से पहले सभी मॉक को नष्ट/रीसेट करना आवश्यक था।
सबसे आसान और सबसे सीधा समाधान 'resetAllMocks' को 'beforeEach' के अंदर इस्तेमाल करना था:
describe(‘Check XPTO Use Case’, () => {
beforeEach(() => {
jest.resetAllMocks() // dessa forma aqui
})
it(‘should return ….’, async () => {
// ...
})
})
*एक 'आफ्टर ईच' भी हो सकता था, इसका वही प्रभाव होता।
इस तरह, पिछले परीक्षण में रेडिस द्वारा संचित की गई सभी चीजें अब अगले परीक्षण के लिए उपलब्ध नहीं होंगी, इसलिए वे सभी एक दूसरे से "पृथक" चलेंगे।
अंत में सब कुछ ठीक हो गया :
एक नोट, मैंने '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