2015-02-11 32 views
2

我的代碼(真正的應用程序代碼是更復雜的),則點是測試$state.includes角UI路由器設定的當前狀態中的單元測試

$scope.Testing (state) { 
    if (!$state.includes(state)){ 
     $state.go(state); 
    } 
} 

在單元測試這個簡單的片段中,我需要設置目前的狀態是狀態的子狀態來進行測試:

spyOn($state,"go"); 
$state.current.name = "app.subState";//set current state 
$scope.Testing("app"); 
expect($state.go).not.toHaveBeenCalled(); 

$state.go仍稱。它在我看來設置$state.current.name不起作用。然後我想:

spyOn($state,"go"); 
$state.transitionTo("app.subState");//set current state. 
$scope.Testing("app"); 
expect($state.go).not.toHaveBeenCalled(); 

不過貌似$state.transitionTo火災真正的HTTP請求,並像一個錯誤結束:Error: Unexpected request: GET /state.html

感謝。

回答

0

這是因爲你可能已經設置了templateUrl並且ui-router會嘗試使用http調用來獲取它。 您可以使用$httpBackend來攔截請求並返回一些內容,或者使用Karma html-to-js processor這會將您的html文件插入到模塊中,因此所有內容都將從模板緩存中取而代之。

+0

使用Karma html-to-js處理器是個不錯的主意,但是如果我們觸發一個真實的狀態變化,所有的代碼初始化狀態將會運行,這可能會發送更多的真正的https – 2015-08-13 14:36:36

+0

我不認爲ui-view在單元測試中沒有真正編譯,所以控制器不會被調用。我剛剛嘗試了一個非常簡單的狀態,使用一個創建'$ http'請求的控制器,並在我的單元測試中加載狀態。它沒有提醒意外的請求,所以我傾向於認爲這不會成爲問題,儘管需要進一步的測試。 – GabrielG 2015-08-13 14:50:02

相關問題