The new expression lowering lowers everything after `useValue` / `useFactory` into a separate exported variable. If the value was a `forwardRef`, this was passed to the runtime and resulted in errors. This change unwraps `forwardRef`s during runtime again. Note: we can’t unwrap the `forwardRef` into an exported variable during compile time, as this would defeat the purpose of the `forwardRef` in referring to something that can’t be referred to at this position.
		
			
				
	
	
		
			30 lines
		
	
	
		
			896 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			896 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. 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 './init';
 | |
| 
 | |
| import * as fs from 'fs';
 | |
| import * as path from 'path';
 | |
| 
 | |
| import {CUSTOM} from '../src/custom_token';
 | |
| import {CompWithProviders} from '../src/features';
 | |
| import {MainModule} from '../src/module';
 | |
| 
 | |
| import {createComponent, createModule} from './util';
 | |
| 
 | |
| describe('template codegen output', () => {
 | |
|   it('should support forwardRef with useValue in components', () => {
 | |
|     const compFixture = createComponent(CompWithProviders);
 | |
|     expect(compFixture.componentInstance.ctxProp).toBe('strValue');
 | |
|   });
 | |
| 
 | |
|   it('should support forwardRef with useValue in modules', () => {
 | |
|     const modRef = createModule();
 | |
|     expect(modRef.injector.get(CUSTOM).name).toBe('some name');
 | |
|   });
 | |
| });
 |