From e5c9f7a50751cf404215084f4320109c104d6bfe Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 1 Nov 2018 20:53:41 +0100 Subject: [PATCH] fix(ivy): provide NgZone to ComponentRef (#26898) Fixes the r3 `TestBed` not providing an `NgZone` to the `ComponentFixture`. PR Close #26898 --- packages/core/testing/src/r3_test_bed.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/core/testing/src/r3_test_bed.ts b/packages/core/testing/src/r3_test_bed.ts index 886c10835f..567a0abb3e 100644 --- a/packages/core/testing/src/r3_test_bed.ts +++ b/packages/core/testing/src/r3_test_bed.ts @@ -12,7 +12,7 @@ import {ComponentFixture} from './component_fixture'; import {MetadataOverride} from './metadata_override'; import {ComponentResolver, DirectiveResolver, NgModuleResolver, PipeResolver, Resolver} from './resolvers'; import {TestBed} from './test_bed'; -import {ComponentFixtureAutoDetect, TestBedStatic, TestComponentRenderer, TestModuleMetadata} from './test_bed_common'; +import {ComponentFixtureAutoDetect, ComponentFixtureNoNgZone, TestBedStatic, TestComponentRenderer, TestModuleMetadata} from './test_bed_common'; let _nextRootElementId = 0; @@ -357,11 +357,16 @@ export class TestBedRender3 implements Injector, TestBed { `It looks like '${stringify(type)}' has not been IVY compiled - it has no 'ngComponentDef' field`); } - const componentFactory = new ComponentFactory(componentDef); - const componentRef = - componentFactory.create(Injector.NULL, [], `#${rootElId}`, this._moduleRef); + const noNgZone: boolean = this.get(ComponentFixtureNoNgZone, false); const autoDetect: boolean = this.get(ComponentFixtureAutoDetect, false); - const fixture = new ComponentFixture(componentRef, this.get(NgZone), autoDetect); + const ngZone: NgZone = noNgZone ? null : this.get(NgZone, null); + const componentFactory = new ComponentFactory(componentDef); + const initComponent = () => { + const componentRef = + componentFactory.create(Injector.NULL, [], `#${rootElId}`, this._moduleRef); + return new ComponentFixture(componentRef, ngZone, autoDetect); + }; + const fixture = ngZone ? ngZone.run(initComponent) : initComponent(); this._activeFixtures.push(fixture); return fixture; }