2011-11-18 16 views
15

परीक्षण मैं jQuery कोड है कि जब मैं एक लिंक यह पहली खाल पर क्लिक करें और फिर कुछ HTML निकाल देता है, जैसे इतना: सुनिश्चित करती हैQUnit में प्रतीक्षा कर रहा है

$(this).parent().parent().hide('slow', function() { 
    $(this).remove(); 
}); 

मैं एक QUnit परीक्षण बनाना चाहते है कि जो HTML सवाल में नष्ट कर दिया गया: बेशक यह ठीक() परीक्षण से पहले छिपाने एनीमेशन का अंत हो चला है चलाया जाता है की

$(thelink).click(); 

// Check that it is gone, by finding the first item in the list 
entity = input.form.find('.recurrenceinput_occurrences .occurrence span.action a')[0]; 
// And make sure it's NOT the deleted one: 
ok(entity.attributes.date.value !== "20110413T000000"); 

समस्या है, इसलिए offenting एचटीएमएल अभी तक नहीं निकाला गया है, और परीक्षण में विफल रहता है ।

मैंने एक या दूसरे के लिए परीक्षण में देरी/रोकथाम के विभिन्न तरीकों की कोशिश की है, लेकिन कुछ भी काम नहीं करता है। सबसे स्पष्ट एक एसिनेटटेस्ट का उपयोग करना है और

stop(); 
setTimeout(start, 2000); 

लेकिन यह वास्तव में परीक्षण को रोक नहीं देता है। ऐसा लगता है कि कुछ 0 सेकंड के लिए को रोकना प्रतीत होता है, लेकिन मुझे यकीन नहीं है कि क्या। :-)

कोई विचार?

उत्तर

21

आपका परीक्षण ऐसा कुछ दिखना चाहिए।

test('asynchronous test', function() { 
    stop(); // Pause the test 
    //Add your wait 
    setTimeout(function() { 
     //Make assertion 
     ok(true); 
     // After the assertion called, restart the test 
     start(); 
    }, 1000); 
}); 
+0

बिंगो कर सकते हैं! वह चीजों का सही क्रम था। :-) तो रुकें() वास्तव में केवल परीक्षण को खत्म करने से रोकता है? –

+1

इस दृष्टिकोण को बहिष्कृत किया गया था (http://qunitjs.com/upgrade-guide-2.x/#replace-stop-and-start-with-assert-async)। @ ekcrisp का जवाब नए दृष्टिकोण का उपयोग करता है। – Joe

+0

क्या आश्चर्य है कि 6 साल पहले जो कुछ पूछा गया था उसे बहिष्कृत कर दिया गया है। lol – epascarello

5

आप एक कॉलबैक एक बार एक तत्व के लिए सभी एनिमेशन पूरा कर लें आग promise समारोह इस्तेमाल कर सकते हैं। इसका तात्पर्य है कि आपको यह जानने की जरूरत है कि परीक्षण में एनिमेशन किस तत्व पर चल रहे हैं (लेकिन आपको यह जानने की आवश्यकता नहीं है कि एनीमेशन कब तक है)। यहाँ

+0

यह एक दिलचस्प विचार है, लेकिन मैं इस समय jQuery 1.4 पर फंस गया हूं, इसलिए कोई भी नहीं कर सकता है। –

4

QUnit ज़ोर वस्तु का उपयोग कर आप

test("async test", function (assert) { 
    var done = assert.async(); 
    setTimeout(function() { 
      delayedPartOfTest(); 
      done(); 
     }, 20000); 
    }) 

}); 
संबंधित मुद्दे