diff options
| author | Igor Minar | 2013-04-03 14:36:57 -0700 |
|---|---|---|
| committer | Igor Minar | 2013-04-03 17:40:15 -0700 |
| commit | fec4ef38815340e8e5a6b65fd6c08f5c74e701d8 (patch) | |
| tree | 084b4797094099beba867eb6dda4c4c47c8c82b3 | |
| parent | ecdf119a76476f2a57105a3170be4075e43765c3 (diff) | |
| download | angular.js-fec4ef38815340e8e5a6b65fd6c08f5c74e701d8.tar.bz2 | |
feat(Scenario): autodisable animations when running e2e tests
animations cause the dom to contain elements that have been removed
from the model but are being animated out.
we could teach the e2e runner to wait for animations but that would
make all tests slower. it should be quite safe to just disable
animations automatically when the app is running via the e2e test
runner.
this change disables only css animations. we should make additional
change that disables js animations as well, but since we don't need
this right now I'm punting on it.
| -rw-r--r-- | src/bootstrap/bootstrap-prettify.js | 5 | ||||
| -rw-r--r-- | src/ngScenario/Application.js | 28 | ||||
| -rw-r--r-- | test/ngScenario/ApplicationSpec.js | 11 |
3 files changed, 37 insertions, 7 deletions
diff --git a/src/bootstrap/bootstrap-prettify.js b/src/bootstrap/bootstrap-prettify.js index 026587a2..a9e61d4f 100644 --- a/src/bootstrap/bootstrap-prettify.js +++ b/src/bootstrap/bootstrap-prettify.js @@ -179,7 +179,8 @@ directive.ngEvalJavascript = ['getEmbeddedTemplate', function(getEmbeddedTemplat }]; -directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', function($templateCache, $browser, docsRootScope, $location) { +directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', '$sniffer', + function($templateCache, $browser, docsRootScope, $location, $sniffer) { return { terminal: true, link: function(scope, element, attrs) { @@ -189,6 +190,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', $provide.value('$templateCache', $templateCache); $provide.value('$anchorScroll', angular.noop); $provide.value('$browser', $browser); + $provide.value('$sniffer', $sniffer); $provide.provider('$location', function() { this.$get = ['$rootScope', function($rootScope) { docsRootScope.$on('$locationChangeSuccess', function(event, oldUrl, newUrl) { @@ -223,6 +225,7 @@ directive.ngEmbedApp = ['$templateCache', '$browser', '$rootScope', '$location', event.preventDefault(); } }); + angular.bootstrap(element, modules); } }; diff --git a/src/ngScenario/Application.js b/src/ngScenario/Application.js index 2ca6c8fd..f7ce28cb 100644 --- a/src/ngScenario/Application.js +++ b/src/ngScenario/Application.js @@ -49,7 +49,7 @@ angular.scenario.Application.prototype.getWindow_ = function() { */ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) { var self = this; - var frame = this.getFrame_(); + var frame = self.getFrame_(); //TODO(esprehn): Refactor to use rethrow() errorFn = errorFn || function(e) { throw e; }; if (url === 'about:blank') { @@ -57,21 +57,39 @@ angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorF } else if (url.charAt(0) === '#') { url = frame.attr('src').split('#')[0] + url; frame.attr('src', url); - this.executeAction(loadFn); + self.executeAction(loadFn); } else { frame.remove(); - this.context.find('#test-frames').append('<iframe>'); - frame = this.getFrame_(); + self.context.find('#test-frames').append('<iframe>'); + frame = self.getFrame_(); + + frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!"; + frame.load(function() { frame.unbind(); try { + var $window = self.getWindow_(); + + if ($window.angular) { + // Disable animations + + // TODO(i): this doesn't disable javascript animations + // we don't need that for our tests, but it should be done + $window.angular.resumeBootstrap([['$provide', function($provide) { + $provide.decorator('$sniffer', function($delegate) { + $delegate.supportsTransitions = false; + return $delegate; + }); + }]]); + } + self.executeAction(loadFn); } catch (e) { errorFn(e); } }).attr('src', url); } - this.context.find('> h2 a').attr('href', url).text(url); + self.context.find('> h2 a').attr('href', url).text(url); }; /** diff --git a/test/ngScenario/ApplicationSpec.js b/test/ngScenario/ApplicationSpec.js index 0236b8d7..cb9fb478 100644 --- a/test/ngScenario/ApplicationSpec.js +++ b/test/ngScenario/ApplicationSpec.js @@ -9,11 +9,20 @@ describe('angular.scenario.Application', function() { } beforeEach(function() { + document.body.innerHTML = ''; frames = _jQuery("<div></div>"); + _jQuery(document.body).append(frames); app = new angular.scenario.Application(frames); }); - it('should return new $window and $document after navigate', function() { + + afterEach(function() { + _jQuery('iframe').unbind(); // cleanup any leftover onload handlers + document.body.innerHTML = ''; + }); + + + it('should return new $window and $document after navigateTo', function() { var called; var testWindow, testDocument, counter = 0; app.getWindow_ = function() { |
