2015-02-11 69 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

相关问题