Created
October 7, 2014 16:03
-
-
Save cawabunga/bfb97a46ca969da35f2a to your computer and use it in GitHub Desktop.
Protractor Long polling fix (author fedenunez)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clientSideScripts.waitForAngular = function() { | |
var selector = arguments[0]; | |
var callback = arguments[1]; | |
var TIMEOUT_MS = 18000; // ms | |
var INTERVAL_MS = 5; //ms | |
var elapsed = 0; | |
var el = document.querySelector(selector); | |
// "inject" $rootScope service | |
var $rootScope = angular.element(el).injector().get('$rootScope'); | |
// "inject" our own longpolling service | |
var modelService = angular.element(el).injector().get('model'); | |
var checkLoop = function() { | |
if (elapsed <= TIMEOUT_MS ) { | |
// check angular digest state and check our longpoll service state (modelService state) | |
if (!$rootScope.$$phase && ( !modelService.isProcessing() )) { | |
// everything is synchronized! | |
callback(); | |
} else { | |
// somebody is still processing, wait a little bit more. | |
elapsed = elapsed + INTERVAL_MS; | |
setTimeout( checkLoop, INTERVAL_MS ); | |
} | |
} else { | |
callback( "Timedout while waiting for angular!" ); | |
} | |
} | |
//initialize checking loop | |
setTimeout( checkLoop, 0 ); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment