mirror of https://github.com/abpframework/abp.git
3 changed files with 70 additions and 0 deletions
@ -0,0 +1,38 @@ |
|||
import { Injector, ModuleWithProviders, NgModule } from '@angular/core'; |
|||
import { TestBed } from '@angular/core/testing'; |
|||
import { LazyModuleFactory } from '../utils/factory-utils'; |
|||
|
|||
@NgModule() |
|||
class Module { |
|||
static forChild(): ModuleWithProviders<Module> { |
|||
return { |
|||
ngModule: Module, |
|||
providers: [{ provide: 'foo', useValue: 'bar' }], |
|||
}; |
|||
} |
|||
} |
|||
|
|||
describe('LazyModuleFactory', () => { |
|||
const factory = new LazyModuleFactory(Module.forChild()); |
|||
|
|||
describe('#moduleType', () => { |
|||
it('should return the ngModule property of given ModuleWithProviders', () => { |
|||
expect(factory.moduleType).toBe(Module); |
|||
}); |
|||
}); |
|||
|
|||
describe('#create', () => { |
|||
it('should return an instance of NgModuleRef_', () => { |
|||
TestBed.configureTestingModule({}); |
|||
|
|||
const injector = TestBed.inject(Injector); |
|||
const moduleRef = factory.create(injector); |
|||
|
|||
expect('componentFactoryResolver' in moduleRef).toBe(true); |
|||
expect('destroy' in moduleRef).toBe(true); |
|||
expect('injector' in moduleRef).toBe(true); |
|||
expect('instance' in moduleRef).toBe(true); |
|||
expect('onDestroy' in moduleRef).toBe(true); |
|||
}); |
|||
}); |
|||
}); |
|||
@ -0,0 +1,31 @@ |
|||
import { |
|||
Compiler, |
|||
Injector, |
|||
ModuleWithProviders, |
|||
NgModuleFactory, |
|||
NgModuleRef, |
|||
StaticProvider, |
|||
Type, |
|||
} from '@angular/core'; |
|||
|
|||
export class LazyModuleFactory<T> extends NgModuleFactory<T> { |
|||
get moduleType(): Type<T> { |
|||
return this.moduleWithProviders.ngModule; |
|||
} |
|||
|
|||
constructor(private moduleWithProviders: ModuleWithProviders<T>) { |
|||
super(); |
|||
} |
|||
|
|||
create(parentInjector: Injector | null): NgModuleRef<T> { |
|||
const injector = Injector.create({ |
|||
parent: parentInjector, |
|||
providers: this.moduleWithProviders.providers as StaticProvider[], |
|||
}); |
|||
|
|||
const compiler = injector.get(Compiler); |
|||
const factory = compiler.compileModuleSync(this.moduleType); |
|||
|
|||
return factory.create(injector); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue