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);
 | |
| });
 |