fix(ivy): align NgModuleRef implementation between Ivy and ViewEngine (#27482)
Solves FW-765 and FW-767 PR Close #27482
This commit is contained in:
@ -3561,94 +3561,93 @@ describe('Integration', () => {
|
||||
expect(fixture.nativeElement).toHaveText('lazy-loaded-parent [lazy-loaded-child]');
|
||||
})));
|
||||
|
||||
fixmeIvy('FW-646: Directive providers don\'t support primitive types as DI tokens')
|
||||
.it('should have 2 injector trees: module and element',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
@Component({
|
||||
selector: 'lazy',
|
||||
template: 'parent[<router-outlet></router-outlet>]',
|
||||
viewProviders: [
|
||||
{provide: 'shadow', useValue: 'from parent component'},
|
||||
],
|
||||
})
|
||||
class Parent {
|
||||
}
|
||||
it('should have 2 injector trees: module and element',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
@Component({
|
||||
selector: 'lazy',
|
||||
template: 'parent[<router-outlet></router-outlet>]',
|
||||
viewProviders: [
|
||||
{provide: 'shadow', useValue: 'from parent component'},
|
||||
],
|
||||
})
|
||||
class Parent {
|
||||
}
|
||||
|
||||
@Component({selector: 'lazy', template: 'child'})
|
||||
class Child {
|
||||
}
|
||||
@Component({selector: 'lazy', template: 'child'})
|
||||
class Child {
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
declarations: [Parent],
|
||||
imports: [RouterModule.forChild([{
|
||||
path: 'parent',
|
||||
component: Parent,
|
||||
children: [
|
||||
{path: 'child', loadChildren: 'child'},
|
||||
]
|
||||
}])],
|
||||
providers: [
|
||||
{provide: 'moduleName', useValue: 'parent'},
|
||||
{provide: 'fromParent', useValue: 'from parent'},
|
||||
],
|
||||
})
|
||||
class ParentModule {
|
||||
}
|
||||
@NgModule({
|
||||
declarations: [Parent],
|
||||
imports: [RouterModule.forChild([{
|
||||
path: 'parent',
|
||||
component: Parent,
|
||||
children: [
|
||||
{path: 'child', loadChildren: 'child'},
|
||||
]
|
||||
}])],
|
||||
providers: [
|
||||
{provide: 'moduleName', useValue: 'parent'},
|
||||
{provide: 'fromParent', useValue: 'from parent'},
|
||||
],
|
||||
})
|
||||
class ParentModule {
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
declarations: [Child],
|
||||
imports: [RouterModule.forChild([{path: '', component: Child}])],
|
||||
providers: [
|
||||
{provide: 'moduleName', useValue: 'child'},
|
||||
{provide: 'fromChild', useValue: 'from child'},
|
||||
{provide: 'shadow', useValue: 'from child module'},
|
||||
],
|
||||
})
|
||||
class ChildModule {
|
||||
}
|
||||
@NgModule({
|
||||
declarations: [Child],
|
||||
imports: [RouterModule.forChild([{path: '', component: Child}])],
|
||||
providers: [
|
||||
{provide: 'moduleName', useValue: 'child'},
|
||||
{provide: 'fromChild', useValue: 'from child'},
|
||||
{provide: 'shadow', useValue: 'from child module'},
|
||||
],
|
||||
})
|
||||
class ChildModule {
|
||||
}
|
||||
|
||||
loader.stubbedModules = {
|
||||
parent: ParentModule,
|
||||
child: ChildModule,
|
||||
};
|
||||
loader.stubbedModules = {
|
||||
parent: ParentModule,
|
||||
child: ChildModule,
|
||||
};
|
||||
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
router.resetConfig([{path: 'lazy', loadChildren: 'parent'}]);
|
||||
router.navigateByUrl('/lazy/parent/child');
|
||||
advance(fixture);
|
||||
expect(location.path()).toEqual('/lazy/parent/child');
|
||||
expect(fixture.nativeElement).toHaveText('parent[child]');
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
router.resetConfig([{path: 'lazy', loadChildren: 'parent'}]);
|
||||
router.navigateByUrl('/lazy/parent/child');
|
||||
advance(fixture);
|
||||
expect(location.path()).toEqual('/lazy/parent/child');
|
||||
expect(fixture.nativeElement).toHaveText('parent[child]');
|
||||
|
||||
const pInj = fixture.debugElement.query(By.directive(Parent)).injector !;
|
||||
const cInj = fixture.debugElement.query(By.directive(Child)).injector !;
|
||||
const pInj = fixture.debugElement.query(By.directive(Parent)).injector !;
|
||||
const cInj = fixture.debugElement.query(By.directive(Child)).injector !;
|
||||
|
||||
expect(pInj.get('moduleName')).toEqual('parent');
|
||||
expect(pInj.get('fromParent')).toEqual('from parent');
|
||||
expect(pInj.get(Parent)).toBeAnInstanceOf(Parent);
|
||||
expect(pInj.get('fromChild', null)).toEqual(null);
|
||||
expect(pInj.get(Child, null)).toEqual(null);
|
||||
expect(pInj.get('moduleName')).toEqual('parent');
|
||||
expect(pInj.get('fromParent')).toEqual('from parent');
|
||||
expect(pInj.get(Parent)).toBeAnInstanceOf(Parent);
|
||||
expect(pInj.get('fromChild', null)).toEqual(null);
|
||||
expect(pInj.get(Child, null)).toEqual(null);
|
||||
|
||||
expect(cInj.get('moduleName')).toEqual('child');
|
||||
expect(cInj.get('fromParent')).toEqual('from parent');
|
||||
expect(cInj.get('fromChild')).toEqual('from child');
|
||||
expect(cInj.get(Parent)).toBeAnInstanceOf(Parent);
|
||||
expect(cInj.get(Child)).toBeAnInstanceOf(Child);
|
||||
// The child module can not shadow the parent component
|
||||
expect(cInj.get('shadow')).toEqual('from parent component');
|
||||
expect(cInj.get('moduleName')).toEqual('child');
|
||||
expect(cInj.get('fromParent')).toEqual('from parent');
|
||||
expect(cInj.get('fromChild')).toEqual('from child');
|
||||
expect(cInj.get(Parent)).toBeAnInstanceOf(Parent);
|
||||
expect(cInj.get(Child)).toBeAnInstanceOf(Child);
|
||||
// The child module can not shadow the parent component
|
||||
expect(cInj.get('shadow')).toEqual('from parent component');
|
||||
|
||||
const pmInj = pInj.get(NgModuleRef).injector;
|
||||
const cmInj = cInj.get(NgModuleRef).injector;
|
||||
const pmInj = pInj.get(NgModuleRef).injector;
|
||||
const cmInj = cInj.get(NgModuleRef).injector;
|
||||
|
||||
expect(pmInj.get('moduleName')).toEqual('parent');
|
||||
expect(cmInj.get('moduleName')).toEqual('child');
|
||||
expect(pmInj.get('moduleName')).toEqual('parent');
|
||||
expect(cmInj.get('moduleName')).toEqual('child');
|
||||
|
||||
expect(pmInj.get(Parent, '-')).toEqual('-');
|
||||
expect(cmInj.get(Parent, '-')).toEqual('-');
|
||||
expect(pmInj.get(Child, '-')).toEqual('-');
|
||||
expect(cmInj.get(Child, '-')).toEqual('-');
|
||||
})));
|
||||
expect(pmInj.get(Parent, '-')).toEqual('-');
|
||||
expect(cmInj.get(Parent, '-')).toEqual('-');
|
||||
expect(pmInj.get(Child, '-')).toEqual('-');
|
||||
expect(cmInj.get(Child, '-')).toEqual('-');
|
||||
})));
|
||||
|
||||
// https://github.com/angular/angular/issues/12889
|
||||
it('should create a single instance of lazy-loaded modules',
|
||||
@ -3689,57 +3688,55 @@ describe('Integration', () => {
|
||||
})));
|
||||
|
||||
// https://github.com/angular/angular/issues/13870
|
||||
fixmeIvy(
|
||||
'FW-767: Lazy loaded modules are not used when resolving dependencies in one of their components')
|
||||
.it('should create a single instance of guards for lazy-loaded modules',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
@Injectable()
|
||||
class Service {
|
||||
}
|
||||
it('should create a single instance of guards for lazy-loaded modules',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
@Injectable()
|
||||
class Service {
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
class Resolver implements Resolve<Service> {
|
||||
constructor(public service: Service) {}
|
||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||
return this.service;
|
||||
}
|
||||
}
|
||||
@Injectable()
|
||||
class Resolver implements Resolve<Service> {
|
||||
constructor(public service: Service) {}
|
||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||
return this.service;
|
||||
}
|
||||
}
|
||||
|
||||
@Component({selector: 'lazy', template: 'lazy'})
|
||||
class LazyLoadedComponent {
|
||||
resolvedService: Service;
|
||||
constructor(public injectedService: Service, route: ActivatedRoute) {
|
||||
this.resolvedService = route.snapshot.data['service'];
|
||||
}
|
||||
}
|
||||
@Component({selector: 'lazy', template: 'lazy'})
|
||||
class LazyLoadedComponent {
|
||||
resolvedService: Service;
|
||||
constructor(public injectedService: Service, route: ActivatedRoute) {
|
||||
this.resolvedService = route.snapshot.data['service'];
|
||||
}
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
declarations: [LazyLoadedComponent],
|
||||
providers: [Service, Resolver],
|
||||
imports: [
|
||||
RouterModule.forChild([{
|
||||
path: 'loaded',
|
||||
component: LazyLoadedComponent,
|
||||
resolve: {'service': Resolver},
|
||||
}]),
|
||||
]
|
||||
})
|
||||
class LoadedModule {
|
||||
}
|
||||
@NgModule({
|
||||
declarations: [LazyLoadedComponent],
|
||||
providers: [Service, Resolver],
|
||||
imports: [
|
||||
RouterModule.forChild([{
|
||||
path: 'loaded',
|
||||
component: LazyLoadedComponent,
|
||||
resolve: {'service': Resolver},
|
||||
}]),
|
||||
]
|
||||
})
|
||||
class LoadedModule {
|
||||
}
|
||||
|
||||
loader.stubbedModules = {expected: LoadedModule};
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
router.resetConfig([{path: 'lazy', loadChildren: 'expected'}]);
|
||||
router.navigateByUrl('/lazy/loaded');
|
||||
advance(fixture);
|
||||
loader.stubbedModules = {expected: LoadedModule};
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
router.resetConfig([{path: 'lazy', loadChildren: 'expected'}]);
|
||||
router.navigateByUrl('/lazy/loaded');
|
||||
advance(fixture);
|
||||
|
||||
expect(fixture.nativeElement).toHaveText('lazy');
|
||||
const lzc = fixture.debugElement.query(By.directive(LazyLoadedComponent))
|
||||
.componentInstance;
|
||||
expect(lzc.injectedService).toBe(lzc.resolvedService);
|
||||
})));
|
||||
expect(fixture.nativeElement).toHaveText('lazy');
|
||||
const lzc =
|
||||
fixture.debugElement.query(By.directive(LazyLoadedComponent)).componentInstance;
|
||||
expect(lzc.injectedService).toBe(lzc.resolvedService);
|
||||
})));
|
||||
|
||||
|
||||
it('should emit RouteConfigLoadStart and RouteConfigLoadEnd event when route is lazy loaded',
|
||||
@ -3990,28 +3987,26 @@ describe('Integration', () => {
|
||||
});
|
||||
});
|
||||
|
||||
fixmeIvy(
|
||||
'FW-767: Lazy loaded modules are not used when resolving dependencies in one of their components')
|
||||
.it('should use the injector of the lazily-loaded configuration',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
loader.stubbedModules = {expected: LoadedModule};
|
||||
it('should use the injector of the lazily-loaded configuration',
|
||||
fakeAsync(inject(
|
||||
[Router, Location, NgModuleFactoryLoader],
|
||||
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||
loader.stubbedModules = {expected: LoadedModule};
|
||||
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
const fixture = createRoot(router, RootCmp);
|
||||
|
||||
router.resetConfig([{
|
||||
path: 'eager-parent',
|
||||
component: EagerParentComponent,
|
||||
children: [{path: 'lazy', loadChildren: 'expected'}]
|
||||
}]);
|
||||
router.resetConfig([{
|
||||
path: 'eager-parent',
|
||||
component: EagerParentComponent,
|
||||
children: [{path: 'lazy', loadChildren: 'expected'}]
|
||||
}]);
|
||||
|
||||
router.navigateByUrl('/eager-parent/lazy/lazy-parent/lazy-child');
|
||||
advance(fixture);
|
||||
router.navigateByUrl('/eager-parent/lazy/lazy-parent/lazy-child');
|
||||
advance(fixture);
|
||||
|
||||
expect(location.path()).toEqual('/eager-parent/lazy/lazy-parent/lazy-child');
|
||||
expect(fixture.nativeElement).toHaveText('eager-parent lazy-parent lazy-child');
|
||||
})));
|
||||
expect(location.path()).toEqual('/eager-parent/lazy/lazy-parent/lazy-child');
|
||||
expect(fixture.nativeElement).toHaveText('eager-parent lazy-parent lazy-child');
|
||||
})));
|
||||
});
|
||||
|
||||
it('works when given a callback',
|
||||
|
@ -8,7 +8,6 @@
|
||||
|
||||
import {Compiler, Component, NgModule, NgModuleFactoryLoader, NgModuleRef} from '@angular/core';
|
||||
import {TestBed, fakeAsync, inject, tick} from '@angular/core/testing';
|
||||
import {fixmeIvy} from '@angular/private/testing';
|
||||
import {PreloadAllModules, PreloadingStrategy, RouterPreloader} from '@angular/router';
|
||||
|
||||
import {Route, RouteConfigLoadEnd, RouteConfigLoadStart, Router, RouterModule} from '../index';
|
||||
@ -60,66 +59,63 @@ describe('RouterPreloader', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should work',
|
||||
fakeAsync(inject(
|
||||
[NgModuleFactoryLoader, RouterPreloader, Router, NgModuleRef],
|
||||
(loader: SpyNgModuleFactoryLoader, preloader: RouterPreloader, router: Router,
|
||||
testModule: NgModuleRef<any>) => {
|
||||
const events: Array<RouteConfigLoadStart|RouteConfigLoadEnd> = [];
|
||||
@NgModule({
|
||||
declarations: [LazyLoadedCmp],
|
||||
imports:
|
||||
[RouterModule.forChild([{path: 'LoadedModule2', component: LazyLoadedCmp}])]
|
||||
})
|
||||
class LoadedModule2 {
|
||||
}
|
||||
|
||||
fixmeIvy(
|
||||
'FW-765: NgModuleRef hierarchy is differently constructed when the router preloads modules')
|
||||
.it('should work',
|
||||
fakeAsync(inject(
|
||||
[NgModuleFactoryLoader, RouterPreloader, Router, NgModuleRef],
|
||||
(loader: SpyNgModuleFactoryLoader, preloader: RouterPreloader, router: Router,
|
||||
testModule: NgModuleRef<any>) => {
|
||||
const events: Array<RouteConfigLoadStart|RouteConfigLoadEnd> = [];
|
||||
@NgModule({
|
||||
declarations: [LazyLoadedCmp],
|
||||
imports: [RouterModule.forChild(
|
||||
[{path: 'LoadedModule2', component: LazyLoadedCmp}])]
|
||||
})
|
||||
class LoadedModule2 {
|
||||
}
|
||||
@NgModule({
|
||||
imports:
|
||||
[RouterModule.forChild([{path: 'LoadedModule1', loadChildren: 'expected2'}])]
|
||||
})
|
||||
class LoadedModule1 {
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(
|
||||
[{path: 'LoadedModule1', loadChildren: 'expected2'}])]
|
||||
})
|
||||
class LoadedModule1 {
|
||||
}
|
||||
router.events.subscribe(e => {
|
||||
if (e instanceof RouteConfigLoadEnd || e instanceof RouteConfigLoadStart) {
|
||||
events.push(e);
|
||||
}
|
||||
});
|
||||
|
||||
router.events.subscribe(e => {
|
||||
if (e instanceof RouteConfigLoadEnd || e instanceof RouteConfigLoadStart) {
|
||||
events.push(e);
|
||||
}
|
||||
});
|
||||
loader.stubbedModules = {
|
||||
expected: LoadedModule1,
|
||||
expected2: LoadedModule2,
|
||||
};
|
||||
|
||||
loader.stubbedModules = {
|
||||
expected: LoadedModule1,
|
||||
expected2: LoadedModule2,
|
||||
};
|
||||
preloader.preload().subscribe(() => {});
|
||||
|
||||
preloader.preload().subscribe(() => {});
|
||||
tick();
|
||||
|
||||
tick();
|
||||
const c = router.config;
|
||||
expect(c[0].loadChildren).toEqual('expected');
|
||||
|
||||
const c = router.config;
|
||||
expect(c[0].loadChildren).toEqual('expected');
|
||||
const loadedConfig: LoadedRouterConfig = (c[0] as any)._loadedConfig !;
|
||||
const module: any = loadedConfig.module;
|
||||
expect(loadedConfig.routes[0].path).toEqual('LoadedModule1');
|
||||
expect(module._parent).toBe(testModule);
|
||||
|
||||
const loadedConfig: LoadedRouterConfig = (c[0] as any)._loadedConfig !;
|
||||
const module: any = loadedConfig.module;
|
||||
expect(loadedConfig.routes[0].path).toEqual('LoadedModule1');
|
||||
expect(module._parent).toBe(testModule);
|
||||
const loadedConfig2: LoadedRouterConfig =
|
||||
(loadedConfig.routes[0] as any)._loadedConfig !;
|
||||
const module2: any = loadedConfig2.module;
|
||||
expect(loadedConfig2.routes[0].path).toEqual('LoadedModule2');
|
||||
expect(module2._parent).toBe(module);
|
||||
|
||||
const loadedConfig2: LoadedRouterConfig =
|
||||
(loadedConfig.routes[0] as any)._loadedConfig !;
|
||||
const module2: any = loadedConfig2.module;
|
||||
expect(loadedConfig2.routes[0].path).toEqual('LoadedModule2');
|
||||
expect(module2._parent).toBe(module);
|
||||
|
||||
expect(events.map(e => e.toString())).toEqual([
|
||||
'RouteConfigLoadStart(path: lazy)',
|
||||
'RouteConfigLoadEnd(path: lazy)',
|
||||
'RouteConfigLoadStart(path: LoadedModule1)',
|
||||
'RouteConfigLoadEnd(path: LoadedModule1)',
|
||||
]);
|
||||
})));
|
||||
expect(events.map(e => e.toString())).toEqual([
|
||||
'RouteConfigLoadStart(path: lazy)',
|
||||
'RouteConfigLoadEnd(path: lazy)',
|
||||
'RouteConfigLoadStart(path: LoadedModule1)',
|
||||
'RouteConfigLoadEnd(path: LoadedModule1)',
|
||||
]);
|
||||
})));
|
||||
});
|
||||
|
||||
describe('should support modules that have already been loaded', () => {
|
||||
@ -130,60 +126,57 @@ describe('RouterPreloader', () => {
|
||||
});
|
||||
});
|
||||
|
||||
fixmeIvy(
|
||||
'FW-765: NgModuleRef hierarchy is differently constructed when the router preloads modules')
|
||||
.it('should work',
|
||||
fakeAsync(inject(
|
||||
[NgModuleFactoryLoader, RouterPreloader, Router, NgModuleRef, Compiler],
|
||||
(loader: SpyNgModuleFactoryLoader, preloader: RouterPreloader, router: Router,
|
||||
testModule: NgModuleRef<any>, compiler: Compiler) => {
|
||||
@NgModule()
|
||||
class LoadedModule2 {
|
||||
}
|
||||
it('should work', fakeAsync(inject(
|
||||
[NgModuleFactoryLoader, RouterPreloader, Router, NgModuleRef, Compiler],
|
||||
(loader: SpyNgModuleFactoryLoader, preloader: RouterPreloader,
|
||||
router: Router, testModule: NgModuleRef<any>, compiler: Compiler) => {
|
||||
@NgModule()
|
||||
class LoadedModule2 {
|
||||
}
|
||||
|
||||
const module2 = compiler.compileModuleSync(LoadedModule2).create(null);
|
||||
const module2 = compiler.compileModuleSync(LoadedModule2).create(null);
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild([
|
||||
<Route>{
|
||||
path: 'LoadedModule2',
|
||||
loadChildren: 'no',
|
||||
_loadedConfig: {
|
||||
routes: [{path: 'LoadedModule3', loadChildren: 'expected3'}],
|
||||
module: module2,
|
||||
}
|
||||
},
|
||||
])]
|
||||
})
|
||||
class LoadedModule1 {
|
||||
}
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild([
|
||||
<Route>{
|
||||
path: 'LoadedModule2',
|
||||
loadChildren: 'no',
|
||||
_loadedConfig: {
|
||||
routes: [{path: 'LoadedModule3', loadChildren: 'expected3'}],
|
||||
module: module2,
|
||||
}
|
||||
},
|
||||
])]
|
||||
})
|
||||
class LoadedModule1 {
|
||||
}
|
||||
|
||||
@NgModule({imports: [RouterModule.forChild([])]})
|
||||
class LoadedModule3 {
|
||||
}
|
||||
@NgModule({imports: [RouterModule.forChild([])]})
|
||||
class LoadedModule3 {
|
||||
}
|
||||
|
||||
loader.stubbedModules = {
|
||||
expected: LoadedModule1,
|
||||
expected3: LoadedModule3,
|
||||
};
|
||||
loader.stubbedModules = {
|
||||
expected: LoadedModule1,
|
||||
expected3: LoadedModule3,
|
||||
};
|
||||
|
||||
preloader.preload().subscribe(() => {});
|
||||
preloader.preload().subscribe(() => {});
|
||||
|
||||
tick();
|
||||
tick();
|
||||
|
||||
const c = router.config;
|
||||
const c = router.config;
|
||||
|
||||
const loadedConfig: LoadedRouterConfig = (c[0] as any)._loadedConfig !;
|
||||
const module: any = loadedConfig.module;
|
||||
expect(module._parent).toBe(testModule);
|
||||
const loadedConfig: LoadedRouterConfig = (c[0] as any)._loadedConfig !;
|
||||
const module: any = loadedConfig.module;
|
||||
expect(module._parent).toBe(testModule);
|
||||
|
||||
const loadedConfig2: LoadedRouterConfig =
|
||||
(loadedConfig.routes[0] as any)._loadedConfig !;
|
||||
const loadedConfig3: LoadedRouterConfig =
|
||||
(loadedConfig2.routes[0] as any)._loadedConfig !;
|
||||
const module3: any = loadedConfig3.module;
|
||||
expect(module3._parent).toBe(module2);
|
||||
})));
|
||||
const loadedConfig2: LoadedRouterConfig =
|
||||
(loadedConfig.routes[0] as any)._loadedConfig !;
|
||||
const loadedConfig3: LoadedRouterConfig =
|
||||
(loadedConfig2.routes[0] as any)._loadedConfig !;
|
||||
const module3: any = loadedConfig3.module;
|
||||
expect(module3._parent).toBe(module2);
|
||||
})));
|
||||
});
|
||||
|
||||
describe('should ignore errors', () => {
|
||||
|
Reference in New Issue
Block a user