The last commit change `async` to `waitForAsync`. This commit update all usages in the code and also update aio doc. PR Close #37583
		
			
				
	
	
		
			167 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google LLC All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| import {ResourceLoader} from '@angular/compiler';
 | |
| import {Compiler, Component, NgModule} from '@angular/core';
 | |
| import {fakeAsync, inject, TestBed, tick, waitForAsync} from '@angular/core/testing';
 | |
| import {ResourceLoaderImpl} from '@angular/platform-browser-dynamic/src/resource_loader/resource_loader_impl';
 | |
| 
 | |
| 
 | |
| 
 | |
| // Components for the tests.
 | |
| class FancyService {
 | |
|   value: string = 'real value';
 | |
|   getAsyncValue() {
 | |
|     return Promise.resolve('async value');
 | |
|   }
 | |
|   getTimeoutValue() {
 | |
|     return new Promise((resolve, reject) => {
 | |
|       setTimeout(() => {
 | |
|         resolve('timeout value');
 | |
|       }, 10);
 | |
|     });
 | |
|   }
 | |
| }
 | |
| 
 | |
| @Component({
 | |
|   selector: 'external-template-comp',
 | |
|   templateUrl: '/base/angular/packages/platform-browser/test/static_assets/test.html'
 | |
| })
 | |
| class ExternalTemplateComp {
 | |
| }
 | |
| 
 | |
| @Component({selector: 'bad-template-comp', templateUrl: 'non-existent.html'})
 | |
| class BadTemplateUrl {
 | |
| }
 | |
| 
 | |
| // Tests for angular/testing bundle specific to the browser environment.
 | |
| // For general tests, see test/testing/testing_public_spec.ts.
 | |
| if (isBrowser) {
 | |
|   describe('test APIs for the browser', () => {
 | |
|     describe('using the async helper', () => {
 | |
|       let actuallyDone: boolean;
 | |
| 
 | |
|       beforeEach(() => {
 | |
|         actuallyDone = false;
 | |
|       });
 | |
| 
 | |
|       afterEach(() => {
 | |
|         expect(actuallyDone).toEqual(true);
 | |
|       });
 | |
| 
 | |
|       it('should run async tests with ResourceLoaders', waitForAsync(() => {
 | |
|            const resourceLoader = new ResourceLoaderImpl();
 | |
|            resourceLoader
 | |
|                .get('/base/angular/packages/platform-browser/test/static_assets/test.html')
 | |
|                .then(() => {
 | |
|                  actuallyDone = true;
 | |
|                });
 | |
|          }),
 | |
|          10000);  // Long timeout here because this test makes an actual ResourceLoader.
 | |
|     });
 | |
| 
 | |
|     describe('using the test injector with the inject helper', () => {
 | |
|       describe('setting up Providers', () => {
 | |
|         beforeEach(() => {
 | |
|           TestBed.configureTestingModule(
 | |
|               {providers: [{provide: FancyService, useValue: new FancyService()}]});
 | |
|         });
 | |
| 
 | |
|         it('provides a real ResourceLoader instance',
 | |
|            inject([ResourceLoader], (resourceLoader: ResourceLoader) => {
 | |
|              expect(resourceLoader instanceof ResourceLoaderImpl).toBeTruthy();
 | |
|            }));
 | |
| 
 | |
|         it('should allow the use of fakeAsync',
 | |
|            fakeAsync(inject([FancyService], (service: any /** TODO #9100 */) => {
 | |
|              let value: any /** TODO #9100 */;
 | |
|              service.getAsyncValue().then(function(val: any /** TODO #9100 */) {
 | |
|                value = val;
 | |
|              });
 | |
|              tick();
 | |
|              expect(value).toEqual('async value');
 | |
|            })));
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('Compiler', () => {
 | |
|       it('should return NgModule id when asked', () => {
 | |
|         @NgModule({
 | |
|           id: 'test-module',
 | |
|         })
 | |
|         class TestModule {
 | |
|         }
 | |
| 
 | |
|         TestBed.configureTestingModule({
 | |
|           imports: [TestModule],
 | |
|         });
 | |
|         const compiler = TestBed.inject(Compiler);
 | |
|         expect(compiler.getModuleId(TestModule)).toBe('test-module');
 | |
|       });
 | |
|     });
 | |
| 
 | |
|     describe('errors', () => {
 | |
|       let originalJasmineIt: any;
 | |
| 
 | |
|       const patchJasmineIt = () => {
 | |
|         let resolve: (result: any) => void;
 | |
|         let reject: (error: any) => void;
 | |
|         const promise = new Promise((res, rej) => {
 | |
|           resolve = res;
 | |
|           reject = rej;
 | |
|         });
 | |
|         originalJasmineIt = jasmine.getEnv().it;
 | |
|         jasmine.getEnv().it = (description: string, fn: (done: DoneFn) => void): any => {
 | |
|           const done = (() => resolve(null)) as DoneFn;
 | |
|           done.fail = reject;
 | |
|           fn(done);
 | |
|           return null;
 | |
|         };
 | |
|         return promise;
 | |
|       };
 | |
| 
 | |
|       const restoreJasmineIt = () => {
 | |
|         jasmine.getEnv().it = originalJasmineIt;
 | |
|       };
 | |
| 
 | |
|       it('should fail when an ResourceLoader fails', done => {
 | |
|         const itPromise = patchJasmineIt();
 | |
| 
 | |
|         it('should fail with an error from a promise', waitForAsync(() => {
 | |
|              TestBed.configureTestingModule({declarations: [BadTemplateUrl]});
 | |
|              TestBed.compileComponents();
 | |
|            }));
 | |
| 
 | |
|         itPromise.then(
 | |
|             () => {
 | |
|               done.fail('Expected test to fail, but it did not');
 | |
|             },
 | |
|             (err: any) => {
 | |
|               expect(err.message)
 | |
|                   .toEqual('Uncaught (in promise): Failed to load non-existent.html');
 | |
|               done();
 | |
|             });
 | |
|         restoreJasmineIt();
 | |
|       }, 10000);
 | |
|     });
 | |
| 
 | |
|     describe('TestBed createComponent', function() {
 | |
|       it('should allow an external templateUrl', waitForAsync(() => {
 | |
|            TestBed.configureTestingModule({declarations: [ExternalTemplateComp]});
 | |
|            TestBed.compileComponents().then(() => {
 | |
|              const componentFixture = TestBed.createComponent(ExternalTemplateComp);
 | |
|              componentFixture.detectChanges();
 | |
|              expect(componentFixture.nativeElement.textContent).toEqual('from external template');
 | |
|            });
 | |
|          }),
 | |
|          10000);  // Long timeout here because this test makes an actual ResourceLoader
 | |
|                   // request, and is slow on Edge.
 | |
|     });
 | |
|   });
 | |
| }
 |