我有一个茉莉花测试指令,冲洗$timeout,以测试指令内的某些代码。在应用程序的另一点,我有一个ui-router处理导航,它的resolve
如下所示 $stateProvider
.state('home', {
url: '/home',
component: 'home',
resolve: {
myservice: "myservice",
myItems: function(myservice) {
return myservice.resource.query().$promise;
}
}
})
该指令与主组件位于同一个angular模块中(该指令嵌套在该组件中)。
每当测试运行的指令和$timeout.flush()被调用,我得到一个'错误:意外的请求'与查询的url。即使指令和组件不应该关联,这种情况也会发生。一个快速修复是只是添加一个$httpBackend来修复它,但这不应该发生,随着更多的东西被添加,我认为这个问题将被复制。
我已经确认a)它是触发请求的解析函数,b)我已经检查了指令测试中的$state,但它返回一个空字符串,所以我不认为它试图设置home状态c)在指令测试中没有引用此组件或类似的任何代码
如果有帮助,测试中的设置代码如下:
scope = $rootScope.$new();
var element = $compile('..../*doesnt include home component at all*/......')(scope);
scope.$digest();
$timeout.flush();
ok .....在长时间阅读以下https://github.com/angular-ui/ui-router/issues/212之后,合适的解决方案是:
beforeEach(module(function($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}))
前面提到的问题解析是在$ urlrouterprovider . else()所指向的状态下调用的。通过延迟,我们阻止了home状态的实现,也阻止了解析触发资源调用