fix(ivy): unable to override ComponentFactoryResolver provider in tests (#32512)

PR Close #32512
This commit is contained in:
Andrew Scott 2019-09-06 09:26:17 -07:00 committed by Matias Niemelä
parent 72807101ed
commit 21245887e6
2 changed files with 15 additions and 4 deletions

View File

@ -116,15 +116,16 @@ export class R3Injector {
constructor(
def: InjectorType<any>, additionalProviders: StaticProvider[]|null, readonly parent: Injector,
source: string|null = null) {
// Start off by creating Records for every provider declared in every InjectorType
// included transitively in `def`.
const dedupStack: InjectorType<any>[] = [];
deepForEach([def], injectorDef => this.processInjectorType(injectorDef, [], dedupStack));
// Start off by creating Records for every provider declared in every InjectorType
// included transitively in additional providers then do the same for `def`. This order is
// important because `def` may include providers that override ones in additionalProviders.
additionalProviders && deepForEach(
additionalProviders, provider => this.processProvider(
provider, def, additionalProviders));
deepForEach([def], injectorDef => this.processInjectorType(injectorDef, [], dedupStack));
// Make sure the INJECTOR token provides this injector.
this.records.set(INJECTOR, makeRecord(undefined, this));

View File

@ -7,7 +7,7 @@
*/
import {CompilerConfig, ResourceLoader} from '@angular/compiler';
import {CUSTOM_ELEMENTS_SCHEMA, Compiler, Component, Directive, Inject, Injectable, InjectionToken, Injector, Input, NgModule, Optional, Pipe, SkipSelf, ɵstringify as stringify} from '@angular/core';
import {CUSTOM_ELEMENTS_SCHEMA, Compiler, Component, ComponentFactoryResolver, Directive, Inject, Injectable, InjectionToken, Injector, Input, NgModule, Optional, Pipe, SkipSelf, ɵstringify as stringify} from '@angular/core';
import {TestBed, async, fakeAsync, getTestBed, inject, tick, withModule} from '@angular/core/testing';
import {expect} from '@angular/platform-browser/testing/src/matchers';
import {ivyEnabled, modifiedInIvy, obsoleteInIvy, onlyInIvy} from '@angular/private/testing';
@ -418,6 +418,16 @@ const bTok = new InjectionToken<string>('b');
});
describe('overriding providers', () => {
describe('in core', () => {
it('ComponentFactoryResolver', () => {
const componentFactoryMock =
jasmine.createSpyObj('componentFactory', ['resolveComponentFactory']);
TestBed.overrideProvider(ComponentFactoryResolver, {useValue: componentFactoryMock});
expect(TestBed.get(ComponentFactoryResolver)).toEqual(componentFactoryMock);
});
});
describe('in NgModules', () => {
it('should support useValue', () => {