From b9001e914740ea0e3bba357a33ddaf13610c874f Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Wed, 30 Nov 2011 20:12:42 -0800 Subject: fix(route): $destroy scope after update and reload When we update route (changing only search param, no route reload) and then reload (change to different route), it did not $destroy last scope. --- test/service/routeSpec.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'test/service') diff --git a/test/service/routeSpec.js b/test/service/routeSpec.js index fed3faef..95560d29 100644 --- a/test/service/routeSpec.js +++ b/test/service/routeSpec.js @@ -401,6 +401,43 @@ describe('$route', function() { })); + it('should $destroy scope after update and reload', + inject(function($route, $location, $rootScope) { + // this is a regression of bug, where $route doesn't copy scope when only updating + + var log = []; + + function logger(msg) { + return function() { + log.push(msg); + }; + } + + function createController(name) { + return function() { + log.push('init-' + name); + this.$on('$destroy', logger('destroy-' + name)); + this.$on('$routeUpdate', logger('route-update')); + }; + } + + $route.when('/foo', {controller: createController('foo'), reloadOnSearch: false}); + $route.when('/bar', {controller: createController('bar')}); + + $location.url('/foo'); + $rootScope.$digest(); + expect(log).toEqual(['init-foo']); + + $location.search({q: 'some'}); + $rootScope.$digest(); + expect(log).toEqual(['init-foo', 'route-update']); + + $location.url('/bar'); + $rootScope.$digest(); + expect(log).toEqual(['init-foo', 'route-update', 'destroy-foo', 'init-bar']); + })); + + describe('reload', function() { it('should reload even if reloadOnSearch is false', -- cgit v1.2.3