1- import { Component , Directive , NgModule , Pipe } from '@angular/core' ;
1+ import { Component , Directive , NgModule , Pipe , ViewContainerRef } from '@angular/core' ;
22import { getTestBed , MetadataOverride , TestBed , TestBedStatic , TestModuleMetadata } from '@angular/core/testing' ;
33
44import funcExtractTokens from '../mock-builder/func.extract-tokens' ;
55import getOverrideDef from '../mock-builder/promise/get-override-def' ;
66import { ngMocks } from '../mock-helper/mock-helper' ;
77import mockHelperFasterInstall from '../mock-helper/mock-helper.faster-install' ;
88import { MockProvider } from '../mock-provider/mock-provider' ;
9+ import helperCreateClone from '../mock-service/helper.create-clone' ;
910
1011import coreDefineProperty from './core.define-property' ;
1112import { flatten , mapEntries , mapValues } from './core.helpers' ;
13+ import coreInjector from './core.injector' ;
1214import coreReflectMeta from './core.reflect.meta' ;
1315import coreReflectModuleResolve from './core.reflect.module-resolve' ;
1416import coreReflectProvidedIn from './core.reflect.provided-in' ;
15- import { NG_MOCKS_TOUCHES } from './core.tokens' ;
17+ import { NG_MOCKS , NG_MOCKS_TOUCHES } from './core.tokens' ;
1618import { AnyType } from './core.types' ;
1719import funcGetProvider from './func.get-provider' ;
1820import { isNgDef } from './func.is-ng-def' ;
@@ -226,10 +228,57 @@ const resetTestingModule =
226228 return original . call ( TestBed ) ;
227229 } ;
228230
231+ const viewContainerInstall = ( ) => {
232+ const vcr : any = ViewContainerRef ;
233+
234+ // istanbul ignore else
235+ if ( ! vcr . ngMocksOverridesInstalled ) {
236+ const ngElementId = vcr . __NG_ELEMENT_ID__ ;
237+
238+ // istanbul ignore else
239+ if ( ngElementId ) {
240+ coreDefineProperty (
241+ vcr ,
242+ '__NG_ELEMENT_ID__' ,
243+ helperCreateClone ( ngElementId , undefined , undefined , ( ...ngElementIdArgs : any [ ] ) => {
244+ const vcrInstance = ngElementId . apply ( ngElementId , ngElementIdArgs ) ;
245+
246+ const createComponent = vcrInstance . createComponent ;
247+ coreDefineProperty (
248+ vcrInstance ,
249+ 'createComponent' ,
250+ helperCreateClone (
251+ createComponent ,
252+ undefined ,
253+ undefined ,
254+ ( component : any , ...createComponentArgs : any [ ] ) => {
255+ const map = coreInjector ( NG_MOCKS , vcrInstance . injector ) ;
256+
257+ return createComponent . apply ( vcrInstance , [
258+ map ?. get ( component ) ?? component ,
259+ ...createComponentArgs ,
260+ ] as any ) ;
261+ } ,
262+ ) ,
263+ true ,
264+ ) ;
265+
266+ return vcrInstance ;
267+ } ) ,
268+ true ,
269+ ) ;
270+ }
271+
272+ coreDefineProperty ( ViewContainerRef , 'ngMocksOverridesInstalled' , true ) ;
273+ }
274+ } ;
275+
229276const install = ( ) => {
230- const hooks = mockHelperFasterInstall ( ) ;
231277 // istanbul ignore else
232278 if ( ! ( TestBed as any ) . ngMocksOverridesInstalled ) {
279+ const hooks = mockHelperFasterInstall ( ) ;
280+ viewContainerInstall ( ) ;
281+
233282 // istanbul ignore else
234283 if ( hooks . before . indexOf ( configureTestingModule ) === - 1 ) {
235284 hooks . before . push ( configureTestingModule ) ;
@@ -238,6 +287,7 @@ const install = () => {
238287 if ( hooks . after . indexOf ( resetTestingModule ) === - 1 ) {
239288 hooks . after . push ( resetTestingModule ) ;
240289 }
290+
241291 coreDefineProperty ( TestBed , 'ngMocksOverridesInstalled' , true ) ;
242292 }
243293} ;
0 commit comments