2012-08-24 8 views
15

मैं एक वेब अनुप्रयोग है कि लगातार सर्वर अजाक्स अनुरोध का उपयोग करने से डेटा के लिए चुनाव। मैं zombie.js का उपयोग कर इसके लिए एकीकरण परीक्षण लागू करना चाहता हूं।कैसे zombie.js में browser.wait() उपयोग कैसे करें?

मुझे क्या करना कोशिश कर रहा हूँ जब तक अजाक्स चुनाव पाश सर्वर से डेटा प्राप्त प्रतीक्षा करने के लिए है। डेटा 20 सेकंड के बाद प्राप्त हो जानी चाहिए, इसलिए मैं browser.wait(done, callback) का उपयोग करता है, तो डेटा नहीं है की जाँच करने के लिए, और एक मिनट की एक अधिकतम समय समाप्ति के waitFor निर्धारित किया है।

हालांकि, browser.wait() हमेशा लगभग तुरंत लौटाता है, भले ही मेरा done कॉलबैक झूठा रिटर्न देता है।

zombie API documentation में, मैं पढ़ने के लिए निम्नलिखित के बारे में browser.wait():

... इसे हमेशा के लिए इंतजार नहीं कर सकता, विशेष रूप से टाइमर कि बार-बार (उदाहरण के लिए जाँच पेज राज्य, लंबे समय से मतदान) लागू किए जा सकते के लिए नहीं।

मुझे लगता है कि व्यवहार मैं देख रहा हूँ के लिए कारण है, लेकिन मैं वास्तव में समझ में नहीं आता क्या हो रहा है। मेरे मतदान लूप को सर्वर से डेटा प्राप्त होने तक मैं एक मिनट तक क्यों इंतजार नहीं कर सकता? browser.wait() क्यों नहीं बार-बार आग लगने वाले टाइमर की प्रतीक्षा कर सकते हैं? मेरे परीक्षण को लागू करने के लिए मुझे क्या करने की ज़रूरत है?

+0

क्या आपने इस बारे में कुछ नया खोजा? –

+0

बस यह सुनिश्चित करने के लिए: आप 'waitFor' के लिए मिलीसेकंड का उपयोग कर रहे हैं, है ना? मैं अनुभव की बात करता हूं;) इसके अलावा, 'maxWait' के बारे में मत भूलना। – robertklep

+0

"सर्वर से डेटा के लिए लगातार मतदान" - यदि आपके पास इस पर नियंत्रण है, तो 'socket.io' एक उत्कृष्ट विकल्प होगा – jcollum

उत्तर

2

ज़ोंबी.जेएस डिफ़ॉल्ट रूप से प्रतीक्षा करेंगे जब तक कि वे आपके पृष्ठ पर सभी स्क्रिप्ट लोड नहीं हो जाते हैं और निष्पादित होते हैं यदि वे दस्तावेज़ तैयार करने की प्रतीक्षा कर रहे हैं।

अगर मैं तुम्हें सही ढंग से समझ, अपनी स्क्रिप्ट टिल दस्तावेज़ के 20 सेकंड के बाद तैयार अमल नहीं होंगे। उस मामले में ज़ोंबी एक समारोह है जो आप ब्राउज़र के संदर्भ में जावास्क्रिप्ट का मूल्यांकन करने देगा है, तो आप जल्दी अपने ajax कोड शुरू कर सकते हैं अगर यह एक टाइमर पर है, और आप इसके लिए प्रतीक्षा करने के लिए नहीं करना चाहती। browser.evaluate(expr)

एक अन्य विकल्प पर

देखो बस 20 सेकंड प्रतीक्षा करने के लिए, और फिर परिवर्तन आप उम्मीद कर रहे हैं के लिए डोम को देखने के लिए एक सामान्य जावास्क्रिप्ट टाइमआउट उपयोग करने के लिए किया जाएगा।

setTimeout(function(){ 
    browser.document.query("#interestingElement") 
}, 20*1000); 
+0

बस एक नोट: यदि ज़ोंबी वास्तव में सभी स्क्रिप्ट तक प्रतीक्षा करता तो यह वास्तव में अच्छा होता पेज लोड हो गया है, लेकिन जहां तक ​​मैं http://stackoverflow.com/questions/37482891/php-mink-zombie-handling-hanging-processes-after-a-fatal-exception पर देख सकता हूं, यह आवश्यक नहीं है दुर्भाग्यवश, सभी वेबसाइटों के लिए ... – sdbbs

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