diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..7f06a542465f6ef41b3fdcae1cc8678ab6945576 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,15 @@ +module.exports = { + roots: ["<rootDir>/src"], + testMatch: [ + "**/__tests__/**/*.+(ts|tsx|js)", + "**/?(*.)+(spec|test).+(ts|tsx|js)" + ], + transform: { + "^.+\\.(ts|tsx)$": "ts-jest" + }, + testEnvironment: "node", + preset: "ts-jest", + moduleNameMapper: { + "^@/(.*)$": "<rootDir>/src/$1" + } +}; diff --git a/package.json b/package.json index b37246967dcc2bf46a7bdabc237c7734713d5496..6d189544ba45dc39eb7a16ff3617813c53747d0e 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "test": "jest --testTimeout=20000 --watch", + "test": "jest", "test:watch": "NODE_ENV=dev jest --watch", - "test:coverage": "NODE_ENV=dev jest --testTimeout=20000 --coverage", + "test:coverage": "jest --testTimeout=20000 --coverage", "dev": "nodemon src/index.ts", "start": "node dist/index.js", "build": "rimraf dist && npx tsc" @@ -23,6 +23,7 @@ "express": "^4.18.2", "ini": "^4.1.1", "inversify": "^6.0.2", + "inversify-binding-decorators": "^4.0.0", "inversify-express-utils": "^6.4.6", "jsonata": "^2.0.3", "moment": "^2.29.4", @@ -36,9 +37,11 @@ "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/ini": "^1.3.33", + "@types/jest": "^29.5.11", "@types/uuid": "^9.0.7", "jest": "^29.7.0", "nodemon": "^3.0.1", + "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "typescript": "^5.2.2" } diff --git a/src/gcl/gcl.controller.ts b/src/gcl/gcl.controller.ts index b0d3f2e21ca9a985f0ad2df7ca75cfb019f0b522..52e443047225f14fed1cae0a99501be4099fbcd3 100644 --- a/src/gcl/gcl.controller.ts +++ b/src/gcl/gcl.controller.ts @@ -1,4 +1,4 @@ -import { inject } from "inversify"; +import { inject, injectable } from "inversify"; import { controller, httpPost, requestBody } from "inversify-express-utils"; import { GCLService } from "./gcl.service"; import { XInputService } from "../x-input/x-input.service"; @@ -8,7 +8,7 @@ export class GCLController { constructor( @inject(GCLService) private service: GCLService, @inject(XInputService) private xinputService: XInputService - ) { } + ) {} @httpPost("search") public async search(@requestBody() body: any): Promise<any> { diff --git a/src/index.ts b/src/index.ts index eca0f53cc5344dff60090bdf3a14f3cb98b85a45..27bdb3390d6c98d0f2e0c4e2a788fd4da4258578 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ +import "reflect-metadata"; import express, { Application, NextFunction } from "express"; import { container, server } from "./inversify/inversify.config"; import "./gcl/gcl.controller"; @@ -40,12 +41,12 @@ class App { } private setupMiddlewares() { - const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>( - ErrorHandlerMiddleware - ); - this.app.use( - errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware) - ); + // const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>( + // ErrorHandlerMiddleware + // ); + // this.app.use( + // errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware) + // ); } } diff --git a/src/inversify/inversify.config.ts b/src/inversify/inversify.config.ts index 2c85ae11350d9c4a4ace3c99c05d4b5030c9aa83..42a421da9db884a9197a8f5bf77103a95d47eb14 100644 --- a/src/inversify/inversify.config.ts +++ b/src/inversify/inversify.config.ts @@ -20,6 +20,6 @@ container.bind<PSClientService>(PSClientService).to(PSClientService); container.bind<AppLogger>(AppLogger).to(AppLogger); container.bind<HttpClient>(HttpClient).to(HttpClient); container.bind<XInputService>(XInputService).to(XInputService); -container.bind<ErrorHandlerMiddleware>(ErrorHandlerMiddleware).toSelf(); +// container.bind<ErrorHandlerMiddleware>(ErrorHandlerMiddleware).toSelf(); export { server, container }; diff --git a/src/test/industry-4.0/industry-4.0.spec.ts b/src/test/industry-4.0/industry-4.0.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..96ca452d423b24e3099ebdb439123f374c1b3190 --- /dev/null +++ b/src/test/industry-4.0/industry-4.0.spec.ts @@ -0,0 +1,59 @@ +import "reflect-metadata"; +import { describe, it, expect, beforeEach } from "@jest/globals"; +import { Container } from "inversify"; +import { GCLController } from "../../gcl/gcl.controller"; +import { GCLService } from "../../gcl/gcl.service"; +import { XInputService } from "../../x-input/x-input.service"; +import { TLService } from "../../tl/tl.service"; +import { AppLogger } from "../../app/app.logger"; +import { PSClientService } from "../../psclient/psclient.service"; +import { ConfigService } from "../../config/config.service"; +import HttpClient from "../../httpclient/http.service"; +import { ErrorHandlerMiddleware } from "../../middleware/errorhandler.middleware"; + +const container = new Container(); +// container.bind(); + +describe("GCL Controller Testing", () => { + // let appLogger = new AppLogger(); + // let configService = new ConfigService(); + // let httpClient = new HttpClient(appLogger); + // let xinputService = new XInputService(appLogger, httpClient); + // let psClientService = new PSClientService(configService, httpClient); + // let tlService = new TLService(appLogger); + // let gclService = new GCLService(tlService, psClientService); + // let gclController = new GCLController(gclService, xinputService); + // let errorHandlerMiddleware = new ErrorHandlerMiddleware(appLogger, tlService); + + let container: Container; + + beforeEach(async () => { + container = new Container(); + container.bind<GCLController>(GCLController).toSelf(); + container.bind<GCLService>(GCLService).toSelf(); + + // appLogger = new AppLogger(); + // configService = new ConfigService(); + // httpClient = new HttpClient(appLogger); + // xinputService = new XInputService(appLogger, httpClient); + // psClientService = new PSClientService(configService, httpClient); + // tlService = new TLService(appLogger); + // gclService = new GCLService(tlService, psClientService); + // gclController = new GCLController(gclService, xinputService); + // errorHandlerMiddleware = new ErrorHandlerMiddleware(appLogger, tlService); + }); + + it("should be defined", () => { + // let controller = container.resolve(GCLController); + let service = container.resolve(GCLService); + + // const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>( + // ErrorHandlerMiddleware + // ); + // this.app.use( + // errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware) + // ); + console.log("======>", service); + expect(service).toBeDefined(); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 7c78d7f221fd6d9f9d355543e9844f495b9f4ec0..34e70f7ca41ce750dd81ba3f3a3f7511fe27ae5c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,7 @@ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ @@ -100,7 +100,7 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, "experimentalDecorators": true } }