2013-10-16 4 views
5

के साथ लोड किया गया है, मुझे हमारे फीचर चश्मे के साथ कुछ समस्याएं आ रही हैं। मुझे वर्तमान में आवश्यकता है कि हम अन्यायकर्ता बनें। ऐसा लगता है कि सभी जावास्क्रिप्ट फ़ाइलों को लोड करने से पहले हमारे चश्मा (capybara-webkit के साथ रेल) ​​चलना शुरू हो जाता है। Capybara-webkit मुझे वेबकिट में जावास्क्रिप्ट का मूल्यांकन करने की अनुमति देता है, और मैं यह सुनिश्चित करने के लिए इसका उपयोग करना चाहता हूं कि परीक्षण चलाने से पहले सब कुछ ठीक हो।परीक्षणों में: सुनिश्चित करें कि सभी जेएस requjs

क्या मैं इसे लोड किए गए मॉड्यूल के लिए किसी भी तरह से पूछताछ की आवश्यकता कर सकता हूं? क्या ऐसी घटनाएं हैं जिन्हें मैं सुन सकता हूं? या क्या मैं एक वैश्विक स्थिति स्थापित करने के लिए टेस्ट रनटाइम पर एक आवश्यकताजे मॉड्यूल इंजेक्ट कर सकता हूं जिसे मैं अपने परीक्षणों से पूछ सकता हूं (वास्तव में मेरा पसंदीदा समाधान नहीं)?

मैं एक requirejs विशेषज्ञ नहीं हूँ और हमारे जावास्क्रिप्ट के बहुत लागू नहीं किया है, लेकिन मैं इसे ठीक करने के लिए की जरूरत है;)

उत्तर

1

मैं जवाब here पाया: आप require.defined('modules/booking_form/main') साथ पूछ सकते हैं कि अगर मॉड्यूल लोड या नहीं। कस्टम wait_until के साथ मैं सब कुछ ठीक होने तक अपने परीक्षण चलाने में देरी कर सकता हूं।

+0

यही वह है जो मैं करना चाहता हूं लेकिन cap_btil को capybara से बाहर निकाला गया है –

4

"लोड किया गया" थोड़ा अस्पष्ट शब्द है।

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

require.specified(moduleID); 

एक बार मॉड्यूल एक बार मॉड्यूल के स्रोत प्राप्त किए गए और लोड है और मॉड्यूल की परिभाषा समारोह निष्पादन समाप्त हो गया है हल हो गई है और स्मृति में लोड किया जाता है, या दूसरे शब्दों में। निम्नलिखित सत्य लौटता है।

require.defined(moduleID); 

आप इसे requirejs.s.contexts._.defined में भी देख सकते हैं। यह एक lib की डेटा संरचना का निरीक्षण करने के लिए एक हैकिश तरीका है, लेकिन यदि आप एक मॉड्यूल बीमा करना चाहते हैं तो ब्राउज़र में (फ़ायरबग) में काम करता है या नहीं। मैंने फायरबग और requjs 2.1.4 के साथ निम्नलिखित परीक्षण किया है।

console.log(window.requirejs.s.contexts._.defined['SOME_MODULE']); 

इस विधि भी फ़ायरबग साथ मॉड्यूल की आंतरिक सामग्री (वस्तु/प्रोटोटाइप के गुणों) के निरीक्षण में मदद करता है।

यदि आवश्यकता यह सुनिश्चित करना है कि कोड को आगे बढ़ाने से पहले एक महत्वपूर्ण मॉड्यूल लोड हो। सफलता कॉलबैक कार्यों के साथ कॉल की आवश्यकता है।

require([moduleID], function(moduleExport){ 
    //The module is loaded, proceed to the next step 
    //This is also an inherent load check 
}, function (error) { 
    //The module cant be loaded, handle the exception case 
}); 

निम्नलिखित स्निपेट

ऊपर
console.log(require.specified('TEST_MODULE')); //false if the module isn't required yet 

require(['TEST_MODULE'], function(TEST_MODULE){ 
    console.log(require.defined('TEST_MODULE')); //true 
    console.log(require.s.contexts._.defined['TEST_MODULE'] ? true : false); //true 
}, function (error) { 
    console.log('TEST_MODULE cant be loaded'); 
}); 
console.log(require.defined('TEST_MODULE')); //false if the module isn't ready yet 
console.log(require.specified('TEST_MODULE')); //true 

** requirejs में से हर एक के बजाय इस्तेमाल किया जा सकता मामले में की आवश्यकता होती है की आवश्यकता होती है वैश्विक क्षेत्र में किसी अन्य उद्देश्य के लिए प्रयोग किया जाता है पता चलता है।

** उपरोक्त सभी मानते हैं कि जहां भी आप परीक्षण कर रहे हैं [वैश्विक] की आवश्यकता है [वैश्विक]।

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