@nestjs/testing 8.2.2 → 8.2.6
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/LICENSE +1 -1
- package/Readme.md +6 -3
- package/interfaces/index.d.ts +1 -0
- package/interfaces/index.js +1 -0
- package/interfaces/mock-factory.d.ts +2 -0
- package/interfaces/mock-factory.js +2 -0
- package/package.json +1 -1
- package/testing-injector.d.ts +12 -0
- package/testing-injector.js +48 -0
- package/testing-instance-loader.d.ts +8 -0
- package/testing-instance-loader.js +17 -0
- package/testing-module.builder.d.ts +3 -1
- package/testing-module.builder.js +7 -3
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(The MIT License)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2017-
|
|
3
|
+
Copyright (c) 2017-2022 Kamil Mysliwiec <https://kamilmysliwiec.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
package/Readme.md
CHANGED
|
@@ -57,10 +57,13 @@ 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
|
|
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><a href="https://www.redhat.com" target="_blank"><img src="https://nestjs.com/img/red-hat-logo.svg" width="200" valign="middle" /></a></td>
|
|
63
|
+
<td>
|
|
61
64
|
<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
65
|
<td>
|
|
63
|
-
<a href="https://
|
|
66
|
+
<a href="https://nx.dev" target="_blank"><img src="https://nestjs.com/img/nx-logo.png" height="45" valign="middle" /></a></td>
|
|
64
67
|
</tr></table>
|
|
65
68
|
|
|
66
69
|
#### Gold Sponsors
|
|
@@ -78,7 +81,7 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
|
|
|
78
81
|
<table style="text-align:center;"><tr><td>
|
|
79
82
|
<a href="https://neoteric.eu/" target="_blank"><img src="https://nestjs.com/img/neoteric-cut.png" width="120" valign="middle" /></a> </td><td>
|
|
80
83
|
<a href="http://gojob.com" target="_blank"><img src="http://nestjs.com/img/gojob-logo.png" valign="middle" width="100" /></a> </td><td>
|
|
81
|
-
<a href="
|
|
84
|
+
<a href="https://www.myleodsc.com/" target="_blank"><img src="https://nestjs.com/img/myleo-logo.png" width="180" valign="middle" /></td><td>
|
|
82
85
|
<a href="https://careers.meetdandy.com/?gh_src=063ba61e3us" target="_blank"><img src="https://nestjs.com/img/dandy-roles-logo.svg" width="150" valign="middle" /></td><td>
|
|
83
86
|
<a href="https://www.castlecraft.in" target="_blank"><img src="https://nestjs.com/img/castlecraft-logo.png" width="150" valign="middle" /></td>
|
|
84
87
|
<td><a href="https://www.tinystacks.com" target="_blank"><img src="https://nestjs.com/img/tinystacks-logo.png#1" width="140" valign="middle" /></td></tr></table>
|
package/interfaces/index.d.ts
CHANGED
package/interfaces/index.js
CHANGED
|
@@ -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);
|
package/package.json
CHANGED
|
@@ -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
|
|
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);
|