11import * as optional from 'optional' ;
2- import { NestContainer , InstanceWrapper } from '@nestjs/core/injector/container' ;
3- import { DependenciesScanner } from '@nestjs/core/scanner' ;
4- import { MetadataScanner } from '@nestjs/core/metadata-scanner' ;
5- import { Metatype } from '@nestjs/common/interfaces' ;
6- import { isFunction } from '@nestjs/common/utils/shared.utils' ;
7- import { ModuleTokenFactory } from '@nestjs/core/injector/module-token-factory' ;
2+ import { NestContainer } from '@nestjs/core/injector/container' ;
83import { NestModuleMetatype } from '@nestjs/common/interfaces/modules/module-metatype.interface' ;
9- import { UnknownModuleException } from './errors/unknown-module.exception' ;
10- import { NestApplication } from '@nestjs/core' ;
4+ import { NestApplication , NestApplicationContext } from '@nestjs/core' ;
115import { INestApplication , INestMicroservice } from '@nestjs/common' ;
126import { MicroserviceConfiguration } from '@nestjs/common/interfaces/microservices/microservice-configuration.interface' ;
137import { MicroservicesPackageNotFoundException } from '@nestjs/core/errors/exceptions/microservices-package-not-found.exception' ;
148
159const { NestMicroservice } = optional ( '@nestjs/microservices/nest-microservice' ) || { } as any ;
1610
17- export class TestingModule {
18- private readonly moduleTokenFactory = new ModuleTokenFactory ( ) ;
19-
20- constructor (
21- private readonly container : NestContainer ,
22- private readonly scope : NestModuleMetatype [ ] ,
23- private readonly contextModule ) { }
11+ export class TestingModule extends NestApplicationContext {
12+ constructor ( container : NestContainer , scope : NestModuleMetatype [ ] , contextModule ) {
13+ super ( container , scope , contextModule ) ;
14+ }
2415
2516 public createNestApplication ( express ?) : INestApplication {
2617 return new NestApplication ( this . container , express ) ;
@@ -32,36 +23,4 @@ export class TestingModule {
3223 }
3324 return new NestMicroservice ( this . container , config ) ;
3425 }
35-
36- public select < T > ( module : Metatype < T > ) : TestingModule {
37- const modules = this . container . getModules ( ) ;
38- const moduleMetatype = this . contextModule . metatype ;
39- const scope = this . scope . concat ( moduleMetatype ) ;
40-
41- const token = this . moduleTokenFactory . create ( module as any , scope ) ;
42- const selectedModule = modules . get ( token ) ;
43- if ( ! selectedModule ) {
44- throw new UnknownModuleException ( ) ;
45- }
46- return new TestingModule ( this . container , scope , selectedModule ) ;
47- }
48-
49- public get < T > ( metatypeOrToken : Metatype < T > | string ) : T {
50- return this . findInstanceByPrototypeOrToken < T > ( metatypeOrToken ) ;
51- }
52-
53- private findInstanceByPrototypeOrToken < T > ( metatypeOrToken : Metatype < T > | string ) {
54- const dependencies = new Map ( [
55- ...this . contextModule . components ,
56- ...this . contextModule . routes ,
57- ...this . contextModule . injectables ,
58- ] ) ;
59- const name = isFunction ( metatypeOrToken ) ? ( metatypeOrToken as any ) . name : metatypeOrToken ;
60- const instanceWrapper = dependencies . get ( name ) ;
61- if ( ! instanceWrapper ) {
62- return null ;
63- }
64- return ( instanceWrapper as InstanceWrapper < any > ) . instance ;
65- }
66- }
67-
26+ }
0 commit comments