72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {verifyNoBrowserErrors} from 'angular2/src/test_lib/e2e_util'; | ||
|  | 
 | ||
|  | function whenStable(rootSelector) { | ||
|  |   // TODO(hankduan): remove this call once Protractor implements it
 | ||
|  |   return browser.executeAsyncScript('var el = document.querySelector("' + rootSelector + '");' + | ||
|  |                                     'window.getAngularTestability(el).whenStable(arguments[0]);'); | ||
|  | }; | ||
|  | 
 | ||
|  | describe('async', () => { | ||
|  |   var URL = 'examples/src/async/index.html'; | ||
|  | 
 | ||
|  |   beforeEach(() => browser.get(URL)); | ||
|  | 
 | ||
|  |   it('should work with synchronous actions', () => { | ||
|  |     var increment = $('#increment'); | ||
|  |     increment.$('.action').click(); | ||
|  | 
 | ||
|  |     expect(increment.$('.val').getText()).toEqual('1'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should wait for asynchronous actions', () => { | ||
|  |     var timeout = $('#delayedIncrement'); | ||
|  |     timeout.$('.action').click(); | ||
|  | 
 | ||
|  |     // At this point, the async action is still pending, so the count should
 | ||
|  |     // still be 0.
 | ||
|  |     expect(timeout.$('.val').getText()).toEqual('0'); | ||
|  | 
 | ||
|  |     whenStable('async-app') | ||
|  |         .then(() => { | ||
|  |           // whenStable should only be called when the async action finished,
 | ||
|  |           // so the count should be 1 at this point.
 | ||
|  |           expect(timeout.$('.val').getText()).toEqual('1'); | ||
|  |         }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should notice when asynchronous actions are cancelled', () => { | ||
|  |     var timeout = $('#delayedIncrement'); | ||
|  |     timeout.$('.action').click(); | ||
|  | 
 | ||
|  |     // At this point, the async action is still pending, so the count should
 | ||
|  |     // still be 0.
 | ||
|  |     expect(timeout.$('.val').getText()).toEqual('0'); | ||
|  | 
 | ||
|  |     timeout.$('.cancel').click(); | ||
|  |     whenStable('async-app') | ||
|  |         .then(() => { | ||
|  |           // whenStable should be called since the async action is cancelled. The
 | ||
|  |           // count should still be 0;
 | ||
|  |           expect(timeout.$('.val').getText()).toEqual('0'); | ||
|  |         }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should wait for a series of asynchronous actions', () => { | ||
|  |     var timeout = $('#multiDelayedIncrements'); | ||
|  |     timeout.$('.action').click(); | ||
|  | 
 | ||
|  |     // At this point, the async action is still pending, so the count should
 | ||
|  |     // still be 0.
 | ||
|  |     expect(timeout.$('.val').getText()).toEqual('0'); | ||
|  | 
 | ||
|  |     whenStable('async-app') | ||
|  |         .then(() => { | ||
|  |           // whenStable should only be called when all the async actions
 | ||
|  |           // finished, so the count should be 10 at this point.
 | ||
|  |           expect(timeout.$('.val').getText()).toEqual('10'); | ||
|  |         }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   afterEach(verifyNoBrowserErrors); | ||
|  | }); |