2011-05-12 12 views
9

मैं jasmine इस तरह के परीक्षण चला रहा हूं;जब जास्मीन परीक्षण पूरा हो जाता है

jasmine.getEnv().addReporter(new jasmine.TrivialReporter()); 
    jasmine.getEnv().execute(); 

परीक्षण पूरा होने पर जावास्क्रिप्ट का उपयोग करके मैं पहचानना चाहता हूं। मैं कैसे कर सकता हूँ?

उत्तर

4

मुझे इस समस्या को हल करने के दो अलग-अलग तरीके मिले। एक पूरा होने पर एक कस्टम घटना फेंकने के लिए जैस्मीन को हैक करना है। क्योंकि मैं खरोंच स्क्रीन करने के बाद परीक्षण लोड चाहता था, मैं "reportRunnerResults"

$('body').trigger("jasmine:complete"); 

के अंत में चमेली-html.js में घटना ट्रिगर डाला तो यह घटना के लिए सुन रहा की बात है:

$('body').bind("jasmine:complete", function(e) { ... } 

मेरे मामले में, मैं iFrame में चमेली चल रहा था और एक माता पिता के खिड़की के परिणाम पारित करने के लिए चाहता था, इसलिए मैं अपनी पहली बाँध से माता-पिता में एक घटना को ट्रिगर:

$(window.parent).find('body').trigger("jasmine:complete"); 

यह भी संभव है बिना jquery के यह करने के लिए। मेरी रणनीति "समाप्त-पर" अवधि में जोड़ने के लिए पाठ के लिए मतदान करना था। इस उदाहरण में मैं 8 सेकंड के लिए हर 5 सेकंड मतदान करता हूं।

var counter = 0; 

function checkdone() { 
    if ($('#test-frame').contents().find('span.finished-at').text().length > 0) { 
     ... 
     clearInterval(timer); 
    } else { 
     counter += 500; 
     if (counter > 8000) { 
      ... 
      clearInterval(timer); 
     } 
    } 
} 

var timer = setInterval("checkdone()", 500); 
+0

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

5

कुछ वैकल्पिक तरीके:

ए) उपयोग ConsoleRunner, कि एक onComplete विकल्प स्वीकार करता है। पुराने संस्करण (1.2rc1) एक स्टैंडअलोन पैरामीटर के रूप में पूर्ण कॉलबैक प्राप्त करते हैं।

चूंकि आप लिखने वाले फ़ंक्शन को भी आपूर्ति करते हैं (options.print) आप कंसोल पर लिखी गई टेस्ट रिपोर्ट रखने के बारे में नियंत्रण रखते हैं।

आप एक ही समय में jasmineEnv.addReporter() पर कई पत्रकार सक्रिय हो सकते हैं।

बी) आज़माया नहीं है, लेकिन आप हर सार्वजनिक विधि के खाली कार्यान्वयन के साथ, अपने स्वयं के रिपोर्टर बना सकते हैं लेकिन jasmineDone()

सी) चेक एक पुराने post in the Jasmine google group, जहां लेखक की बचत होती है और jasmine.getEnv().currentRunner().finishCallback ओवरराइड करता है :

var oldCallback = jasmineEnv.currentRunner().finishCallback; 
    jasmineEnv.currentRunner().finishCallback = function() { 
     oldCallback.apply(this, arguments); 
     $("body").append("<div id='_test_complete_signal_'></div"); 
    }; 
    jasmineEnv.execute(); 
+1

एक कस्टम संवाददाता काम जोड़ना! –

1

मैं एचटीएमएल रिपोर्टर के साथ जैस्मीन 1.3.1 चला रहा हूं।

var orig_done = jasmineEnv.currentRunner_.finishCallback; 
jasmineEnv.currentRunner_.finishCallback = function() { 
    orig_done.call(this); 
    // custom code here 
}; 
4

@Xv के रूप में: मैं इस तरह में hooking समाप्त हो गया। सुझाव देता है, एक संवाददाता जोड़ना काम करेगा। आप कुछ आसान कर सकते हैं:

jasmine.getEnv().addReporter({ 
    jasmineDone: function() { 
     // the specs have finished! 
    } 
}); 

http://jasmine.github.io/2.2/custom_reporter.html देखें।