2016-06-08 14 views
0

Ich versuche Einheitstest $ urlRouterProvider.otherwise, um die URL als was auch immer der Benutzer eingegeben zu zeigen. jedes Mal, wenn ich $ Lage in meinem Unit-Test verwenden, ich diesen Fehler jedoch

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) 

Dies ist, was ich in meiner Config-Datei habe:

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

Und das ist, was ich als mein spec Js-Datei

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 mit funktioniert gut, und in der goTo() Funktion $ Lage scheint zu funktionieren, also warum $location.url() tut (oder $location.path) einen Fehler ein Wurf sking über $ httpBackend, wenn ich keine $http.get() Anfrage verwende?

Antwort

0

Es gibt keine schwarze Magie, $templateCache wird konsistent sowohl in Angular- als auch in Third-Party-Bibliotheken verwendet, es sollte wie erwartet funktionieren, wenn es richtig verwendet wird.

Vorlage-Cache-Eintrag ist 'public/template/404.html'.

Und die angeforderte Vorlage ist 'public/template s /404.html'.