我有这个简单的代码片段(真正的应用程序代码更复杂),重点是测试$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
感谢。
答案 0 :(得分:0)
那是因为您可能设置了templateUrl
,而ui-router将尝试使用http调用来获取它。
您可以使用$httpBackend来拦截请求并返回一些内容,或使用Karma html-to-js processor将html文件插入到模块中,这样就可以从模板缓存中获取所有内容。