@nestjs/testing 8.2.2 → 8.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Readme.md CHANGED
@@ -57,10 +57,12 @@ With official support, you can get expert help straight from Nest core team. We
57
57
  Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
58
58
 
59
59
  #### Principal Sponsors
60
- <table style="text-align:center;"><tr><td>
60
+ <table style="text-align:center;"><tr>
61
+ <td><a href="https://trilon.io" target="_blank"><img src="https://nestjs.com/img/trilon.svg" width="200" valign="middle" /></a></td>
62
+ <td>
61
63
  <a href="https://github.com/Sanofi-IADC" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/sanofi.png" width="180" valign="middle" /></a></td>
62
64
  <td>
63
- <a href="https://trilon.io" target="_blank"><img src="https://nestjs.com/img/trilon.svg" width="200" valign="middle" /></a></td>
65
+ <a href="https://nx.dev" target="_blank"><img src="https://nestjs.com/img/nx-logo.png" height="45" valign="middle" /></a></td>
64
66
  </tr></table>
65
67
 
66
68
  #### Gold Sponsors
@@ -1,2 +1,3 @@
1
+ export * from './mock-factory';
1
2
  export * from './override-by-factory-options.interface';
2
3
  export * from './override-by.interface';
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./mock-factory"), exports);
4
5
  tslib_1.__exportStar(require("./override-by-factory-options.interface"), exports);
5
6
  tslib_1.__exportStar(require("./override-by.interface"), exports);
@@ -0,0 +1,2 @@
1
+ import { InstanceToken } from '@nestjs/core/injector/module';
2
+ export declare type MockFactory = (token?: InstanceToken) => any;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs/testing",
3
- "version": "8.2.2",
3
+ "version": "8.2.3",
4
4
  "description": "Nest - modern, fast, powerful node.js web framework (@testing)",
5
5
  "author": "Kamil Mysliwiec",
6
6
  "license": "MIT",
@@ -0,0 +1,12 @@
1
+ import { NestContainer } from '@nestjs/core';
2
+ import { Injector, InjectorDependencyContext } from '@nestjs/core/injector/injector';
3
+ import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
4
+ import { Module } from '@nestjs/core/injector/module';
5
+ import { MockFactory } from './interfaces';
6
+ export declare class TestingInjector extends Injector {
7
+ protected mocker?: MockFactory;
8
+ protected container: NestContainer;
9
+ setMocker(mocker: MockFactory): void;
10
+ setContainer(container: NestContainer): void;
11
+ resolveComponentInstance<T>(moduleRef: Module, name: any, dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper<T>, contextId?: import("@nestjs/core").ContextId, inquirer?: InstanceWrapper, keyOrIndex?: string | number): Promise<InstanceWrapper>;
12
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestingInjector = void 0;
4
+ const constants_1 = require("@nestjs/core/injector/constants");
5
+ const injector_1 = require("@nestjs/core/injector/injector");
6
+ const instance_wrapper_1 = require("@nestjs/core/injector/instance-wrapper");
7
+ class TestingInjector extends injector_1.Injector {
8
+ setMocker(mocker) {
9
+ this.mocker = mocker;
10
+ }
11
+ setContainer(container) {
12
+ this.container = container;
13
+ }
14
+ async resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
15
+ try {
16
+ const existingProviderWrapper = await super.resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId, inquirer, keyOrIndex);
17
+ return existingProviderWrapper;
18
+ }
19
+ catch (err) {
20
+ if (this.mocker) {
21
+ const mockedInstance = this.mocker(name);
22
+ if (!mockedInstance) {
23
+ throw err;
24
+ }
25
+ const newWrapper = new instance_wrapper_1.InstanceWrapper({
26
+ name,
27
+ isAlias: false,
28
+ scope: wrapper.scope,
29
+ instance: mockedInstance,
30
+ isResolved: true,
31
+ host: moduleRef,
32
+ metatype: wrapper.metatype,
33
+ });
34
+ const internalCoreModule = this.container.getInternalCoreModuleRef();
35
+ internalCoreModule.addCustomProvider({
36
+ provide: name,
37
+ useValue: mockedInstance,
38
+ }, internalCoreModule.providers);
39
+ internalCoreModule.addExportedProvider(name);
40
+ return newWrapper;
41
+ }
42
+ else {
43
+ throw err;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ exports.TestingInjector = TestingInjector;
@@ -0,0 +1,8 @@
1
+ import { InstanceLoader } from '@nestjs/core/injector/instance-loader';
2
+ import { Module } from '@nestjs/core/injector/module';
3
+ import { MockFactory } from './interfaces';
4
+ import { TestingInjector } from './testing-injector';
5
+ export declare class TestingInstanceLoader extends InstanceLoader {
6
+ protected injector: TestingInjector;
7
+ createInstancesOfDependencies(modules?: Map<string, Module>, mocker?: MockFactory): Promise<void>;
8
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestingInstanceLoader = void 0;
4
+ const instance_loader_1 = require("@nestjs/core/injector/instance-loader");
5
+ const testing_injector_1 = require("./testing-injector");
6
+ class TestingInstanceLoader extends instance_loader_1.InstanceLoader {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.injector = new testing_injector_1.TestingInjector();
10
+ }
11
+ async createInstancesOfDependencies(modules = this.container.getModules(), mocker) {
12
+ this.injector.setContainer(this.container);
13
+ mocker && this.injector.setMocker(mocker);
14
+ await super.createInstancesOfDependencies();
15
+ }
16
+ }
17
+ exports.TestingInstanceLoader = TestingInstanceLoader;
@@ -1,7 +1,7 @@
1
1
  import { LoggerService } from '@nestjs/common';
2
2
  import { ModuleMetadata } from '@nestjs/common/interfaces';
3
3
  import { MetadataScanner } from '@nestjs/core/metadata-scanner';
4
- import { OverrideBy } from './interfaces';
4
+ import { MockFactory, OverrideBy } from './interfaces';
5
5
  import { TestingModule } from './testing-module';
6
6
  export declare class TestingModuleBuilder {
7
7
  private readonly applicationConfig;
@@ -11,9 +11,11 @@ export declare class TestingModuleBuilder {
11
11
  private readonly instanceLoader;
12
12
  private readonly module;
13
13
  private testingLogger;
14
+ private mocker?;
14
15
  constructor(metadataScanner: MetadataScanner, metadata: ModuleMetadata);
15
16
  setLogger(testingLogger: LoggerService): this;
16
17
  overridePipe<T = any>(typeOrToken: T): OverrideBy;
18
+ useMocker(mocker: MockFactory): TestingModuleBuilder;
17
19
  overrideFilter<T = any>(typeOrToken: T): OverrideBy;
18
20
  overrideGuard<T = any>(typeOrToken: T): OverrideBy;
19
21
  overrideInterceptor<T = any>(typeOrToken: T): OverrideBy;
@@ -4,16 +4,16 @@ exports.TestingModuleBuilder = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const application_config_1 = require("@nestjs/core/application-config");
6
6
  const container_1 = require("@nestjs/core/injector/container");
7
- const instance_loader_1 = require("@nestjs/core/injector/instance-loader");
8
7
  const scanner_1 = require("@nestjs/core/scanner");
9
8
  const testing_logger_service_1 = require("./services/testing-logger.service");
9
+ const testing_instance_loader_1 = require("./testing-instance-loader");
10
10
  const testing_module_1 = require("./testing-module");
11
11
  class TestingModuleBuilder {
12
12
  constructor(metadataScanner, metadata) {
13
13
  this.applicationConfig = new application_config_1.ApplicationConfig();
14
14
  this.container = new container_1.NestContainer(this.applicationConfig);
15
15
  this.overloadsMap = new Map();
16
- this.instanceLoader = new instance_loader_1.InstanceLoader(this.container);
16
+ this.instanceLoader = new testing_instance_loader_1.TestingInstanceLoader(this.container);
17
17
  this.scanner = new scanner_1.DependenciesScanner(this.container, metadataScanner, this.applicationConfig);
18
18
  this.module = this.createModule(metadata);
19
19
  }
@@ -24,6 +24,10 @@ class TestingModuleBuilder {
24
24
  overridePipe(typeOrToken) {
25
25
  return this.override(typeOrToken, false);
26
26
  }
27
+ useMocker(mocker) {
28
+ this.mocker = mocker;
29
+ return this;
30
+ }
27
31
  overrideFilter(typeOrToken) {
28
32
  return this.override(typeOrToken, false);
29
33
  }
@@ -40,7 +44,7 @@ class TestingModuleBuilder {
40
44
  this.applyLogger();
41
45
  await this.scanner.scan(this.module);
42
46
  this.applyOverloadsMap();
43
- await this.instanceLoader.createInstancesOfDependencies();
47
+ await this.instanceLoader.createInstancesOfDependencies(this.container.getModules(), this.mocker);
44
48
  this.scanner.applyApplicationProviders();
45
49
  const root = this.getRootModule();
46
50
  return new testing_module_1.TestingModule(this.container, [], root, this.applicationConfig);