diff options
Diffstat (limited to 'test/service/routeSpec.js')
| -rw-r--r-- | test/service/routeSpec.js | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/test/service/routeSpec.js b/test/service/routeSpec.js index fc2c7f9d..4d24279c 100644 --- a/test/service/routeSpec.js +++ b/test/service/routeSpec.js @@ -227,4 +227,140 @@ describe('$route', function() { } }); }); + + + describe('reloadOnSearch', function() { + it('should reload a route when reloadOnSearch is enabled and hashSearch changes', function() { + var scope = angular.scope(), + $location = scope.$service('$location'), + $route = scope.$service('$route'), + reloaded = jasmine.createSpy('route reload'); + + $route.when('/foo', {controller: FooCtrl}); + $route.onChange(reloaded); + + function FooCtrl() { + reloaded(); + } + + $location.updateHash('/foo'); + scope.$eval(); + expect(reloaded).toHaveBeenCalled(); + reloaded.reset(); + + // trigger reload + $location.hashSearch.foo = 'bar'; + scope.$eval(); + expect(reloaded).toHaveBeenCalled(); + }); + + + it('should not reload a route when reloadOnSearch is disabled and only hashSearch changes', + function() { + var scope = angular.scope(), + $location = scope.$service('$location'), + $route = scope.$service('$route'), + reloaded = jasmine.createSpy('route reload'); + + $route.when('/foo', {controller: FooCtrl, reloadOnSearch: false}); + $route.onChange(reloaded); + + function FooCtrl() { + reloaded(); + } + + expect(reloaded).not.toHaveBeenCalled(); + + $location.updateHash('/foo'); + scope.$eval(); + expect(reloaded).toHaveBeenCalled(); + reloaded.reset(); + + // don't trigger reload + $location.hashSearch.foo = 'bar'; + scope.$eval(); + expect(reloaded).not.toHaveBeenCalled(); + }); + + + it('should reload reloadOnSearch route when url differs only in route path param', function() { + var scope = angular.scope(), + $location = scope.$service('$location'), + $route = scope.$service('$route'), + reloaded = jasmine.createSpy('routeReload'), + onRouteChange = jasmine.createSpy('onRouteChange'); + + $route.when('/foo/:fooId', {controller: FooCtrl, reloadOnSearch: false}); + $route.onChange(onRouteChange); + + function FooCtrl() { + reloaded(); + } + + expect(reloaded).not.toHaveBeenCalled(); + expect(onRouteChange).not.toHaveBeenCalled(); + + $location.updateHash('/foo/aaa'); + scope.$eval(); + expect(reloaded).toHaveBeenCalled(); + expect(onRouteChange).toHaveBeenCalled(); + reloaded.reset(); + onRouteChange.reset(); + + $location.updateHash('/foo/bbb'); + scope.$eval(); + expect(reloaded).toHaveBeenCalled(); + expect(onRouteChange).toHaveBeenCalled(); + reloaded.reset(); + onRouteChange.reset(); + + $location.hashSearch.foo = 'bar'; + scope.$eval(); + expect(reloaded).not.toHaveBeenCalled(); + expect(onRouteChange).not.toHaveBeenCalled(); + }); + + + it('should update route params when reloadOnSearch is disabled and hashSearch', function() { + var scope = angular.scope(), + $location = scope.$service('$location'), + $route = scope.$service('$route'), + routeParams = jasmine.createSpy('routeParams'); + + $route.when('/foo', {controller: FooCtrl}); + $route.when('/bar/:barId', {controller: FooCtrl, reloadOnSearch: false}); + + function FooCtrl() { + this.$watch(function() { + return $route.current.params; + }, function(params) { + routeParams(params); + }); + } + + expect(routeParams).not.toHaveBeenCalled(); + + $location.updateHash('/foo'); + scope.$eval(); + expect(routeParams).toHaveBeenCalledWith({}); + routeParams.reset(); + + // trigger reload + $location.hashSearch.foo = 'bar'; + scope.$eval(); + expect(routeParams).toHaveBeenCalledWith({foo: 'bar'}); + routeParams.reset(); + + $location.updateHash('/bar/123'); + scope.$eval(); + expect(routeParams).toHaveBeenCalledWith({barId: '123'}); + routeParams.reset(); + + // don't trigger reload + $location.hashSearch.foo = 'bar'; + scope.$eval(); + $route.current.scope.$eval(); // ng:view propagates evals so we have to do it by hand here + expect(routeParams).toHaveBeenCalledWith({barId: '123', foo: 'bar'}); + }); + }); }); |
