2013-10-09 7 views
9

मैं वेब सॉकेट का परीक्षण करना चाहता हूं जो sockjs का उपयोग करके कार्यान्वित किए गए हैं।यूनिट परीक्षण वेब सॉकेट कैसे करें - जावास्क्रिप्ट

var sock = new SockJS('http://mydomain.com/my_prefix'); 
    sock.onopen = function() { 
     console.log('open'); 
    }; 
    sock.onmessage = function(e) { 
     console.log('message', e.data); 
    }; 
    sock.onclose = function() { 
     console.log('close'); 
    }; 

मैंने गोगल किया और केवल यह article पाया। यह पर्याप्त नहीं है क्योंकि यह इसे पकड़ने के बजाय वास्तविक कनेक्शन बना रहा है।

मैंने एसओ की भी कोशिश की लेकिन केवल एक अनुत्तरित प्रश्न here मिला।

किसी ने sinonjs का सुझाव दिया लेकिन मुझे कोई सभ्य उदाहरण नहीं मिल रहा है।

अगर कोई इस विषय पर कुछ प्रकाश डाल सकता है तो मैं सराहना करूंगा।

उत्तर

3

जब आप किसी बाहरी संसाधन का उपयोग करने वाली सुविधा को यूनिट-टेस्ट करना चाहते हैं, जैसे आपके मामले में वेबसाईट सर्वर, सामान्य संसाधन बाहरी संसाधन का प्रतिनिधित्व करने के लिए एक नकली-वस्तु का उपयोग करना है। एक नकली वस्तु एक वस्तु है जो बाहरी संसाधन की तरह दिखती है और व्यवहार करती है, लेकिन वास्तव में इसका उपयोग नहीं करती है। इसके अतिरिक्त, इसमें लॉगिंग कार्यक्षमता हो सकती है जो परीक्षण कोड को रिपोर्ट करने की अनुमति देता है यदि परीक्षण कोड अपेक्षित व्यवहार करता है।

अपने मामले में आप एक नकली-सॉकजेएस ऑब्जेक्ट बनाएंगे जिसमें सामान्य सॉकजेएस ऑब्जेक्ट के सभी प्रासंगिक गुण और विधियां होंगी, लेकिन इसका कार्यान्वयन वास्तव में किसी सर्वर से संपर्क नहीं करता है। यह केवल विधि कॉल लॉग करता है और एक मौजूदा सर्वर भेजे जाने वाले अपेक्षित प्रतिक्रिया देता है।

फिर आप जिस कोड को परीक्षण करना चाहते हैं उसे दोबारा दोहराएंगे ताकि वह सॉकेट स्वयं नहीं बना सके बल्कि इसके बजाय बाहर से सौंपा गया सॉकेट ऑब्जेक्ट प्राप्त हो जाता है (इसे "dependency injection" कहा जाता है और यह यूनिट लिखने के लिए एक महत्वपूर्ण मुहावरे है- टेस्टेबल कोड)।

अपने असली कोड में, आप एक वास्तविक सॉकजेएस ऑब्जेक्ट असाइन करते हैं। लेकिन आपके यूनिट-टेस्ट में, आप अपना मॉक-ऑब्जेक्ट असाइन करते हैं। आपके परीक्षण-विधियों को बुलाए जाने के बाद आप यह जांचने के लिए नकली ऑब्जेक्ट की जांच कर सकते हैं कि यूनिट ने सर्वर को अपेक्षित डेटा भेजा है या नहीं।

+2

प्रतिक्रिया के लिए धन्यवाद, यह बहुत सारे काम की तरह दिखता है। मैं कुछ तैयार करने के लिए देख रहा हूँ। उदाहरण के लिए, जैस्मीन को नकली AJAX कॉल बनाने के लिए सभी टूल्स मिल गए हैं। वेब सॉकेट अधिक से अधिक लोकप्रिय हो रहे हैं। क्या कोई पुस्तकालय है जो मुझे इन नकली वस्तुओं को बॉक्स से बाहर देता है? –

+2

@ user2855314 जैस्मीन वास्तविक वस्तुओं के आस-पास सजावटी के रूप में नकली वस्तुओं को लागू करता है। इसके लिए इसकी शब्दावली 'जासूस' है। 'SpyOn' विधि को कॉल और कॉलफैक (फ़ंक्शन) 'के कॉल के साथ जंजीर किया जा सकता है जो आपके स्वयं के कार्यान्वयन के लिए विधि-कॉल का प्रतिनिधित्व करता है। यह ऑब्जेक्ट को वास्तव में किसी सर्वर से संपर्क करने का प्रयास करने से रोकता है और इसके बदले आपके कार्यान्वयन का भुगतान करता है। – Philipp

+1

@ फिलिप, क्या आप इसके लिए कोई उदाहरण प्रदान कर सकते हैं? –

संबंधित मुद्दे