Jasmine $timeout在别处触发ui-router解析



我有一个茉莉花测试指令,冲洗$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状态的实现,也阻止了解析触发资源调用

最新更新