मेरे पास एक जावास्क्रिप्ट स्वत: पूर्ण प्लगइन है जो निम्न वर्गों (कॉफ़ीस्क्रिप्ट में लिखी गई) का उपयोग करता है: क्वेरी, सुझाव, सुझाव चयन, और स्वत: पूर्ण। इन वर्गों में से प्रत्येक में जैस्मीन में लिखा गया एक विशिष्ट नमूना है।ग्लोबल नेमस्पेस प्रदूषित किए बिना यूनिट परीक्षण के लिए जावास्क्रिप्ट ऑब्जेक्ट्स का खुलासा कैसे करें
प्लगइन, एक मॉड्यूल के भीतर परिभाषित किया गया है जैसे: की तरह कुछ के साथ
(function(){
// plugin...
}).call(this);
यह ग्लोबल नेमस्पेस को दूषित से कक्षाओं से बचाता है, लेकिन यह भी उन्हें किसी भी परीक्षण से छुपाता है (चमेली के साथ चश्मा, या इकाई-परीक्षण q-इकाई)।
ग्लोबल नेमस्पेस प्रदूषित किए बिना परीक्षण के लिए जावास्क्रिप्ट कक्षाओं या ऑब्जेक्ट्स का पर्दाफाश करने का सबसे अच्छा तरीका क्या है?
मैं जिस समाधान के साथ आया था उसका जवाब दूंगा, लेकिन मुझे आशा है कि कुछ और मानक होगा।
अपडेट: मेरे प्रयास किया गया समाधान
क्योंकि मैं < 100 XP के साथ एक newb हूँ, मैं 8 घंटे के लिए अपने ही सवाल का जवाब नहीं कर सकते हैं। प्रतीक्षा करने के बजाय मैं जो कुछ भी यहां करता हूं उसे जोड़ दूंगा।
इन कक्षाओं को spec करने के लिए, मैंने _test
नामक एक वैश्विक वस्तु का आविष्कार किया जिसे मैंने परीक्षण के लिए सभी कक्षाओं का खुलासा किया। उदाहरण के लिए, coffeescript में:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
मेरी ऐनक के अंदर है, तो, मैं कक्षा प्रकट कर सकते हैं मैं परीक्षण कर रहा हूँ:
Query = window._test.Query
describe 'Query', ->
// ...
यह लाभ यह है कि केवल _test
वस्तु प्रदूषित है है, और यह यह संभावना नहीं है कि यह इस वस्तु की एक और परिभाषा के साथ टकरा जाएगा। यह अभी भी उतना साफ नहीं है जितना मैं इसे पसंद करूंगा। मुझे उम्मीद है कि कोई बेहतर समाधान प्रदान करेगा।
हो सकता है कि कुछ आंतरिक चर का पर्दाफाश, केवल? उदाहरण: 'window.exposedVars = this' (बंद करने का आंतरिक)? –
मैंने इसे पोस्ट करने के कुछ ही सेकंड बाद अपने प्रस्तावित समाधान को जोड़ा। क्या आप सुझाव दे रहे थे कि आप क्या सुझाव दे रहे थे? – Mitch
आपकी प्लगइन कैसे उपयोगी है और अभी भी वैश्विक नामस्थान में कुछ भी नहीं जोड़ रहा है? मैं वास्तव में उत्सुक हूं, शायद आप ऐसा कुछ कर रहे हैं जिसके बारे में मुझे पता नहीं है। जहां तक मैं कह सकता हूं, वहां हमेशा कम से कम एक वस्तु होनी चाहिए जो वैश्विक नामस्थान में हो। –