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