2015-03-21 4 views
9

मैं यह सुनिश्चित करना चाहता हूं कि यदि कोड परीक्षण मोड में चल रहा है, तो यह गलत डेटाबेस तक नहीं पहुंचता है (गलती से)। यह पता लगाने का सबसे अच्छा तरीका क्या है कि कोड वर्तमान में परीक्षण मोड में चल रहा है या नहीं?कैसे पता लगाया जाए कि modea परीक्षण node.js में चल रहा है या नहीं?

+0

इससे बचने का सबसे अच्छा तरीका डेटा लेयर को वास्तव में नकल करना होगा –

+0

आप अपने परीक्षण कहां चला रहे हैं कि उनके पास उत्पादन संसाधनों तक पहुंच है? इसे नेटवर्किंग स्तर पर हल किया जाना चाहिए। उत्पादन डेटाबेस केवल उत्पादन मशीनों से कनेक्शन स्वीकार करना चाहिए। –

+0

... यह उत्पादन वातावरण नहीं हो सकता है। मैं यह सुनिश्चित करना चाहता हूं कि टेस्ट पर्यावरण के साथ परीक्षण चलें। यदि नहीं, तो मैं एक त्रुटि फेंक दूंगा। –

उत्तर

12

जैसा कि पहले से ही टिप्पणी में उल्लेख किया गया है, परीक्षणों के बारे में जागरूक आपके कोड को बनाने का बुरा अभ्यास है। मुझे एसओ और यहां तक ​​कि बाहर भी विषय का पता नहीं लगाया जा सकता है। हालांकि, मैं परीक्षण में लॉन्च होने के तथ्य का पता लगाने के तरीकों के बारे में सोच सकता हूं। मेरे लिए मोचा global दायरे में नहीं जोड़ता है, लेकिन global.it जोड़ता है। तो आपका चेक किया जा सकता है

var isInTest = typeof global.it === 'function'; 

मुझे यकीन है कि आप नहीं global.sinon और global.chai जो आप सबसे अधिक संभावना उपयोग अपने Node.js परीक्षण में के लिए चेक जोड़ने के लिए झूठी पता नहीं लगा पाते होने के लिए सुझाव है।

+0

अब यह परीक्षणों के बारे में जागरूक कोड बनाने के बारे में है। अगर कोई टेस्ट तैनाती सेटिंग्स के साथ चलता है तो मैं एक त्रुटि लिखना चाहता हूं। विचार कुछ "खतरनाक" फ़ंक्शन को गलती से गलत तरीके से कॉन्फ़िगर करने के लिए कहा जाता है (जैसे उत्पादन प्रणाली पर एक टेबल छोड़ना)। –

+0

एक और दुरुपयोग ... डेवलपर का वातावरण समस्या निवारण करने तक उत्पादन कॉन्फ़िगरेशन को संबोधित नहीं करना चाहिए। डेवलपर की कॉन्फ़िगरेशन केवल स्थानीय पर्यावरण या कम से कम चरण तक पहुंचने में सक्षम होना चाहिए, लेकिन उत्पादन नहीं। फिर भी, यह सभी टिप्पणियां और सलाह है, उत्तर प्रदान किया जाता है। समुदाय को यह जानना न भूलें कि यह आपकी आवश्यकताओं के अनुरूप है या गलत है –

+0

यह 'समस्या निवारण' मामले है, डेवलपर्स भूल जाते हैं कि वे वास्तविक डेटाबेस से जुड़े हुए हैं और एक परीक्षण चलाते हैं जो संभावित रूप से डेटा को नष्ट कर देता है ... –

3

process.argv का निरीक्षण मेरे अनुभव में एक अच्छा दृष्टिकोण है।

उदाहरण के लिए

अगर मैं console.log(process.argv) एक परीक्षण मैं निम्नलिखित मिल दौरान:

[ 
    'node', 
    '/usr/local/bin/gulp', 
    'test', 
    '--file', 
    'getSSAI.test.unit.js', 
    '--bail', 
    '--watch' 
] 

जिसमें से आप कि घूंट देख सकते हैं इस्तेमाल किया जा रहा है। yargs का उपयोग करके यह एक बहुत ही आसान व्याख्या करता है।

मैं किरील से दृढ़ता से सहमत हूं और सामान्य रूप से कोड को इस तथ्य से अवगत नहीं होना चाहिए कि इसका परीक्षण किया जा रहा है (आपके मामले में शायद आप अपने डीबी बाध्यकारी/कनेक्शन में एक कन्स्ट्रक्टर के माध्यम से कनेक्शन कर सकते हैं?), लॉगिंग जैसी चीजों के लिए मैं देख सकता हूं कि आप इसका पता क्यों लगा सकते हैं।

+6

एकमात्र कारण है कि मुझे यह जांचने की आवश्यकता है कि एप्लिकेशन परीक्षण के तहत चल रहा है या नहीं, यह जांच है कि मैं उत्पादन डेटाबेस से कनेक्ट नहीं हूं, क्योंकि परीक्षण डेटाबेस को साफ़ करते हैं। सिर्फ शुद्ध परावर्तक, क्योंकि यह कभी नहीं होना चाहिए - लेकिन इस व्यवसाय में 30 वर्षों में, मैंने देखा है कि बहुत सी चीजें गलत हैं जिन्हें "कभी नहीं होगा" के रूप में घोषित किया गया था। –

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

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