From 931cf78057068a28831acd0638e349d80d5e2f16 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Mon, 9 Oct 2017 14:09:01 -0700 Subject: [PATCH] refactor(compiler): introduce `TestBed.deprecatedOverrideProvider` (#19558) This allows use to fix `TestBed.overrideProvider` to keep imported `NgModule`s eager, while allowing our users to still keep the old semantics until they have fixed their tests. PR Close #19558 --- packages/core/testing/src/test_bed.ts | 51 +++++++++++++++++++++--- tools/public_api_guard/core/testing.d.ts | 14 +++++++ 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/packages/core/testing/src/test_bed.ts b/packages/core/testing/src/test_bed.ts index 7368d95b03..54fc3ebe60 100644 --- a/packages/core/testing/src/test_bed.ts +++ b/packages/core/testing/src/test_bed.ts @@ -159,6 +159,25 @@ export class TestBed implements Injector { return TestBed; } + /** + * Overwrites all providers for the given token with the given provider definition. + * + * @deprecated as it makes all NgModules lazy. Introduced only for migrating off of it. + */ + static deprecatedOverrideProvider(token: any, provider: { + useFactory: Function, + deps: any[], + }): void; + static deprecatedOverrideProvider(token: any, provider: {useValue: any;}): void; + static deprecatedOverrideProvider(token: any, provider: { + useFactory?: Function, + useValue?: any, + deps?: any[], + }): typeof TestBed { + getTestBed().deprecatedOverrideProvider(token, provider as any); + return TestBed; + } + static get(token: any, notFoundValue: any = Injector.THROW_IF_NOT_FOUND) { return getTestBed().get(token, notFoundValue); } @@ -394,11 +413,33 @@ export class TestBed implements Injector { deps: any[], }): void; overrideProvider(token: any, provider: {useValue: any;}): void; - overrideProvider(token: any, provider: { - useFactory?: Function, - useValue?: any, - deps?: any[], - }): void { + overrideProvider(token: any, provider: {useFactory?: Function, useValue?: any, deps?: any[]}): + void { + this.overrideProviderImpl(token, provider); + } + + /** + * Overwrites all providers for the given token with the given provider definition. + * + * @deprecated as it makes all NgModules lazy. Introduced only for migrating off of it. + */ + deprecatedOverrideProvider(token: any, provider: { + useFactory: Function, + deps: any[], + }): void; + deprecatedOverrideProvider(token: any, provider: {useValue: any;}): void; + deprecatedOverrideProvider( + token: any, provider: {useFactory?: Function, useValue?: any, deps?: any[]}): void { + this.overrideProviderImpl(token, provider, /* deprecated */ true); + } + + private overrideProviderImpl( + token: any, provider: { + useFactory?: Function, + useValue?: any, + deps?: any[], + }, + deprecated = false): void { let flags: NodeFlags = 0; let value: any; if (provider.useFactory) { diff --git a/tools/public_api_guard/core/testing.d.ts b/tools/public_api_guard/core/testing.d.ts index 5f9acd7c7c..3532e0f888 100644 --- a/tools/public_api_guard/core/testing.d.ts +++ b/tools/public_api_guard/core/testing.d.ts @@ -71,6 +71,13 @@ export declare class TestBed implements Injector { }): void; configureTestingModule(moduleDef: TestModuleMetadata): void; createComponent(component: Type): ComponentFixture; + /** @deprecated */ deprecatedOverrideProvider(token: any, provider: { + useFactory: Function; + deps: any[]; + }): void; + deprecatedOverrideProvider(token: any, provider: { + useValue: any; + }): void; execute(tokens: any[], fn: Function, context?: any): any; get(token: any, notFoundValue?: any): any; /** @experimental */ initTestEnvironment(ngModule: Type | Type[], platform: PlatformRef, aotSummaries?: () => any[]): void; @@ -94,6 +101,13 @@ export declare class TestBed implements Injector { }): typeof TestBed; static configureTestingModule(moduleDef: TestModuleMetadata): typeof TestBed; static createComponent(component: Type): ComponentFixture; + /** @deprecated */ static deprecatedOverrideProvider(token: any, provider: { + useFactory: Function; + deps: any[]; + }): void; + static deprecatedOverrideProvider(token: any, provider: { + useValue: any; + }): void; static get(token: any, notFoundValue?: any): any; /** @experimental */ static initTestEnvironment(ngModule: Type | Type[], platform: PlatformRef, aotSummaries?: () => any[]): TestBed; static overrideComponent(component: Type, override: MetadataOverride): typeof TestBed;