2016-08-26 73 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。$播出。 問題 - 爲什麼發生?處理這種情況的最佳方法是什麼? 現在我添加了$ rootScope。$ digest();在我的測試行動前這似乎解決問題但是我不知道這是否是有效的解決方案

謝謝

回答

0

這可能是一個多回答評論的,但我沒有足夠的聲譽寫評論。

$ locationChangeStart和$ locationChangeSuccess是否在其他所有之前被觸發?甚至在$ rootScope之前?據我所知$ locationChangeStart具有較高的優先級,然後$ rootScope。

在app.on(function(){})中是否有任何內容? ?