2016-08-26 7 views
7

परीक्षण मैं आयनिक आवेदन के लिए इकाई परीक्षण को लागू कर रहा हूँ और जाँच करने के लिए है कि कोई घटनाओं $ rootScope पर प्रसारित किया गया है की जरूरत है

expect($rootScope.$broadcast).not.toHaveBeenCalled(); 

समस्या कभी कभी देखते हैं है $ locationChangeStart और $ locationChangeSuccess ईवेंट प्रसारित किए गए हैं जो मेरे परीक्षण विफल हो जाते हैं। ऐसा लगता है कि आयनिक v1.3.0 नीचे कोड

// update browser 
$rootScope.$watch(function $locationWatch() { 
    var oldUrl = trimEmptyHash($browser.url()); 
    var newUrl = trimEmptyHash($location.absUrl()); 
    var oldState = $browser.state(); 
    var currentReplace = $location.$$replace; 
    var urlOrStateChanged = oldUrl !== newUrl || 
    ($location.$$html5 && $sniffer.history && oldState !== $location.$$state); 

    if (initializing || urlOrStateChanged) { 
    initializing = false; 

    $rootScope.$evalAsync(function() { 
     var newUrl = $location.absUrl(); 
     var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, 
      $location.$$state, oldState).defaultPrevented; 

में उन लोगों से चलाता है "आरंभ" झंडा उपरोक्त कोड में सच है और इस से चलाता है $ rootScope। $ प्रसारण। प्रश्न - यह क्यों हो रहा है? और इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है? अभी मैंने $ रूटस्कोप जोड़ा है। $ Digest(); मेरी परीक्षणों में कार्रवाई करने से पहले जो समस्या को ठीक करने हालांकि मुझे यकीन है कि अगर यह मान्य समाधान है

धन्यवाद नहीं कर रहा हूँ लग रहा था

उत्तर

0

यह एक जवाब की तुलना में एक टिप्पणी की और अधिक हो सकता है, लेकिन मैं काफी प्रतिष्ठा की जरूरत नहीं है एक टिप्पणी लिखने के लिए।

$ location नहीं है चेंजस्टार्ट और $ locationChangeSuccess बाकी सब से पहले निकाल दिया गया? रूटस्कोप से पहले भी? जैसा कि मैं $ location समझता हूं चेंजस्टार्ट में उच्च प्राथमिकता स्तर है तो $ rootScope।

क्या आपके पास app.on (function() {}) के भीतर कुछ भी है; ?

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