Angular ui路由器在单元测试中设置当前状态

时间:2015-02-11 04:53:10

标签: angularjs unit-testing jasmine angular-ui-router

我有这个简单的代码片段(真正的应用程序代码更复杂),重点是测试$state.includes

$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

感谢。

1 个答案:

答案 0 :(得分:0)

那是因为您可能设置了templateUrl,而ui-router将尝试使用http调用来获取它。 您可以使用$httpBackend来拦截请求并返回一些内容,或使用Karma html-to-js processor将html文件插入到模块中,这样就可以从模板缓存中获取所有内容。