diff --git a/packages/core/test/test_bed_spec.ts b/packages/core/test/test_bed_spec.ts index be238f17c9605..28c0a09053278 100644 --- a/packages/core/test/test_bed_spec.ts +++ b/packages/core/test/test_bed_spec.ts @@ -225,10 +225,31 @@ describe('TestBed', () => { }); it('allow to override a provider', () => { - TestBed.overrideProvider(NAME, {useValue: 'injected World !'}); + TestBed.overrideProvider(NAME, {useValue: 'injected World!'}); const hello = TestBed.createComponent(HelloWorld); hello.detectChanges(); - expect(hello.nativeElement).toHaveText('Hello injected World !'); + expect(hello.nativeElement).toHaveText('Hello injected World!'); + }); + + it('uses the most recent provider override', () => { + TestBed.overrideProvider(NAME, {useValue: 'injected World!'}); + TestBed.overrideProvider(NAME, {useValue: 'injected World a second time!'}); + const hello = TestBed.createComponent(HelloWorld); + hello.detectChanges(); + expect(hello.nativeElement).toHaveText('Hello injected World a second time!'); + }); + + it('overrides a providers in an array', () => { + TestBed.configureTestingModule({ + imports: [HelloWorldModule], + providers: [ + [{provide: NAME, useValue: 'injected World!'}], + ] + }); + TestBed.overrideProvider(NAME, {useValue: 'injected World a second time!'}); + const hello = TestBed.createComponent(HelloWorld); + hello.detectChanges(); + expect(hello.nativeElement).toHaveText('Hello injected World a second time!'); }); describe('allow override of multi provider', () => { diff --git a/packages/core/testing/src/r3_test_bed_compiler.ts b/packages/core/testing/src/r3_test_bed_compiler.ts index 9c6a558564a25..7b4eaf506ed0c 100644 --- a/packages/core/testing/src/r3_test_bed_compiler.ts +++ b/packages/core/testing/src/r3_test_bed_compiler.ts @@ -621,8 +621,9 @@ export class R3TestBedCompiler { private getOverriddenProviders(providers?: Provider[]): Provider[] { if (!providers || !providers.length || this.providerOverridesByToken.size === 0) return []; - const overrides = this.getProviderOverrides(providers); - const overriddenProviders = [...providers, ...overrides]; + const flattenedProviders = flatten(providers); + const overrides = this.getProviderOverrides(flattenedProviders); + const overriddenProviders = [...flattenedProviders, ...overrides]; const tokenToProviderMap: Map = new Map(); // Iterate through providers from the end so only the most recent provider is used for a given