aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2013-04-03 14:36:57 -0700
committerIgor Minar2013-04-03 17:40:15 -0700
commitfec4ef38815340e8e5a6b65fd6c08f5c74e701d8 (patch)
tree084b4797094099beba867eb6dda4c4c47c8c82b3
parentecdf119a76476f2a57105a3170be4075e43765c3 (diff)
downloadangular.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.js5
-rw-r--r--src/ngScenario/Application.js28
-rw-r--r--test/ngScenario/ApplicationSpec.js11
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() {