में सेटटाइमआउट और क्लीयरटाइम पर जासूस मैं अपने जैस्मीन परीक्षणों में setTimeout
और clearTimeout
पर जासूसी करने में सक्षम नहीं हूं, जो कर्म के माध्यम से चल रहे हैं।कर्मा और जैस्मीन
मैं इस
spyOn(window, 'setTimeout').and.callFake(()=>{});
spyOn(global, 'setTimeout').and.callFake(()=>{});
spyOn(window, 'clearTimeout').and.callThrough();
clock = jasmine.clock();
clock.install();
spyOn(clock, 'setTimeout').and.callThrough();
runMyCode();
expect(window.setTimeout).toHaveBeenCalled(); // no
expect(global.setTimeout).toHaveBeenCalled(); // nope
expect(window.clearTimeout).toHaveBeenCalled(); // no again
expect(clock.setTimeout).toHaveBeenCalled(); // and no
हर मामले में के सभी में बदलाव की कोशिश की है, मैं पुष्टि कर सकता है कि setTimeout
और clearTimeout
runMyCode
में लागू किया गया है, लेकिन इसके बजाय मैं हमेशा Expected spy setTimeout to have been called.
window
के लिए मिलता है, स्पष्ट रूप से ऐसा इसलिए है क्योंकि परीक्षण और धावक (कर्म खिड़की) अलग-अलग फ्रेम में हैं (इसलिए मुझे कुछ अलग क्यों उम्मीद करनी चाहिए)। लेकिन इसके कारण, मैं यह पुष्टि करने का कोई तरीका नहीं देख सकता कि इन वैश्विक कार्यों को लागू किया गया है।
मुझे पता है कि मैं टाइमआउट/अंतराल कॉलबैक का आह्वान करने के लिए jasmine.clock()
का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि मैं setTimeout
स्वयं नहीं देख सकता। और यह पुष्टि करते हुए कि clearTimeout
कहा जाता है बस संभव नहीं है।
इस बिंदु पर, केवल एक चीज मैं के बारे में सोच सकते हैं अमूर्त का एक अलग परत जोड़ने के लिए setTimeout
और clearTimeout
रैप करने के लिए या निर्भरता, जो मैंने पहले किया है के रूप में कार्य इंजेक्षन करने के लिए है, लेकिन मुझे लगता है कि अजीब है।