Angular Jasmine $ location $ httpBackend:"错误:意外请求"

时间:2016-06-08 19:05:21

标签: angularjs unit-testing karma-jasmine

我试图对$ urlRouterProvider.otherwise进行单元测试,以便将url显示为用户输入的内容。但是,每次我在单元测试中使用$ location时,都会出现此错误

path default rerouting should go to error upon bad rerouting url FAILED
    Error: Unexpected request: GET public/templates/404.html
    No more request expected
        at $httpBackend (/Users/project/lib/angular-mocks.js:1207:9)

这就是我在配置文件中的内容:

$urlRouterProvider
        .when('', '/main')
        .when('/', '/main')
        .otherwise(function($injector){
            $injector.get('$state').go('404', {}, { location: false });
        });

这就是我的spec.js文件

describe('path', function(){

    var $rootScope, $state, $location, $injector, $templateCache, state;

    beforeEach(angular.mock.module('app'));

    beforeEach(angular.mock.inject(function(_$rootScope_, _$state_, _$injector_, _$location_, _$templateCache_, _$httpBackend_){
      $rootScope = _$rootScope_;
      $state = _$state_;
      $injector = _$injector_;
      $location = _$location_;
      $templateCache = _$templateCache_;
      $httpBackend = _$httpBackend_;

      $templateCache.put('public/templates/main.html', '');
      $templateCache.put('public/template/audio.html', '');
      $templateCache.put('public/template/404.html', '');

    }));

    describe('default rerouting', function(){
        it('should go to error upon bad url', function(){

            var badUrl = '/badUrlToTest';
            goTo(badUrl);
            expect($state.current.name).toEqual('404');
            expect($location.url()).toBe(badUrl);
        });
    });

    function goTo(url){
        $location.url(url);
        $rootScope.$digest();
    }
})

使用$ state工作正常,并且goTo()函数$ location似乎有效,那么为什么使用$location.url()(或$location.path)会抛出一个错误,询问$ httpBackend何时我没有使用$http.get()请求?

1 个答案:

答案 0 :(得分:0)

没有黑魔法,$templateCache一直在Angular和第三方库中使用,如果使用得当,它应该按预期工作。

模板缓存条目为'public / template / 404.html'。

请求的模板是'public / template s /404.html'。