add tests

This commit is contained in:
admin 2025-08-21 22:39:35 +02:00
parent d5c338225f
commit 050044bb00
8 changed files with 4872 additions and 13 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
.idea .idea
dist dist
node_modules node_modules
coverage

View File

@ -1,6 +1,7 @@
.vscode .vscode
.idea .idea
node_modules node_modules
coverage
src src
.gitignore .gitignore
tsconfig.json tsconfig.json

4787
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,26 @@
{ {
"name": "@apihub24/nestjs-helper", "name": "@apihub24/nestjs-helper",
"version": "1.0.1", "version": "1.0.2",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
"scripts": { "scripts": {
"build": "tsc" "build": "rimraf ./dist && tsc",
"test": "jest",
"test:coverage": "jest --coverage",
"pub": "npm publish",
"rel": "npm i && npm run build && npm run test:coverage"
}, },
"dependencies": { "dependencies": {
"@nestjs/common": "^11.1.6" "@nestjs/common": "^11.1.6"
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5.9.2" "rimraf": "^6.0.1",
"@nestjs/testing": "^11.1.6",
"typescript": "^5.9.2",
"@types/jest": "^30.0.0",
"jest": "^30.0.0",
"ts-jest": "^29.4.1"
}, },
"keywords": [], "keywords": [],
"author": { "author": {
@ -22,5 +31,26 @@
"license": "MIT", "license": "MIT",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": ".",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "./coverage",
"testEnvironment": "node",
"roots": [
"<rootDir>/src/"
],
"moduleNameMapper": {}
} }
} }

7
src/index.spec.ts Normal file
View File

@ -0,0 +1,7 @@
import { takeExportedProviders } from "./";
describe("Module Tests", () => {
it("should export takeExportedProviders Helper", () => {
expect(takeExportedProviders).toBeDefined();
});
});

40
src/provider.spec.ts Normal file
View File

@ -0,0 +1,40 @@
import { Controller } from "@nestjs/common";
import { takeExportedProviders } from "./";
@Controller()
class ControllerMock {}
describe("Provider Helper Tests", () => {
const testProvider = {
provide: "test_provider",
useValue: "test_provider",
};
it("should get exported providers", () => {
const providers = takeExportedProviders({
providers: [testProvider],
exports: [testProvider],
});
expect(providers).toBeDefined();
expect(providers.length).toBe(1);
});
it("should get nothing when nothing is exported", () => {
const providers = takeExportedProviders({
providers: [testProvider],
exports: [],
});
expect(providers).toBeDefined();
expect(providers.length).toBe(0);
});
it("should get only providers", () => {
const providers = takeExportedProviders({
controllers: [ControllerMock],
providers: [testProvider],
exports: [ControllerMock, testProvider],
});
expect(providers).toBeDefined();
expect(providers.length).toBe(1);
});
});

View File

@ -1,16 +1,16 @@
import { DynamicModule, Provider } from '@nestjs/common'; import { DynamicModule, ModuleMetadata, Provider } from "@nestjs/common";
function isProvider(provider: any): provider is Provider { function isProvider(provider: any): provider is Provider {
if ( if (
provider && provider &&
typeof provider === 'object' && typeof provider === "object" &&
Object.prototype.hasOwnProperty.call(provider, 'provide') Object.prototype.hasOwnProperty.call(provider, "provide")
) { ) {
return true; return true;
} }
return false; return false;
} }
export function takeExportedProviders(module: DynamicModule): Provider[] { export function takeExportedProviders(module: ModuleMetadata): Provider[] {
return module.exports?.filter(isProvider) ?? ([] as Provider[]); return module.exports?.filter(isProvider) ?? ([] as Provider[]);
} }

View File

@ -22,5 +22,6 @@
"strictBindCallApply": false, "strictBindCallApply": false,
"noFallthroughCasesInSwitch": false "noFallthroughCasesInSwitch": false
}, },
"include": ["./src"] "include": ["./src"],
"exclude": ["**/*.spec.ts", "**/*.mock.ts"]
} }