Jacobvu84 / nest-graphql-api-test

graphql-api testing demo
0 stars 0 forks source link

1. Scaffold the project with the Nest CLI #1

Open Jacobvu84 opened 1 year ago

Jacobvu84 commented 1 year ago
$ npm i -g @nestjs/cli
$ nest new project-name

This will create a new project directory, and populate the directory with the initial core Nest files and supporting modules, creating a conventional base structure for your project. Creating a new project with the Nest CLI is recommended for first-time users.

you should see

CREATE project-name/.eslintrc.js (663 bytes)
CREATE project-name/.prettierrc (51 bytes)
CREATE project-name/README.md (3340 bytes)
CREATE project-name/nest-cli.json (171 bytes)
CREATE project-name/package.json (1943 bytes)
CREATE project-name/tsconfig.build.json (97 bytes)
CREATE project-name/tsconfig.json (546 bytes)
CREATE project-name/src/app.controller.spec.ts (617 bytes)
CREATE project-name/src/app.controller.ts (274 bytes)
CREATE project-name/src/app.module.ts (249 bytes)
CREATE project-name/src/app.service.ts (142 bytes)
CREATE project-name/src/main.ts (208 bytes)
CREATE project-name/test/app.e2e-spec.ts (630 bytes)
CREATE project-name/test/jest-e2e.json (183 bytes)
Jacobvu84 commented 1 year ago

package.json

{
  "name": "project-name",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "29.5.0",
    "@types/node": "18.15.11",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "29.5.0",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "29.0.5",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.2.0",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}
Jacobvu84 commented 1 year ago
image
jacobvn84 commented 1 year ago

Create new module

nest generate module user-module

outcome:

// user-module.module.ts
import { Module } from ‘nestjs/common’;
@Module({})
export class UserModule{} 

and import into AppModule

//app.module.ts
import { Module } from ‘@nestjs/common’;
import { AppController } from ‘./app.controller’;
import { AppService } from ‘./app.service’;
import { UserModuleModule } from ‘./user-module/user-module.module’;
@Module({
 imports: [UserModuleModule],
 controllers: [AppController],
 providers: [AppService],
})
export class AppModule {}
jacobvn84 commented 1 year ago

Craete controller & service for the module

$ cd src/user-module
$ nest generate provider user-service
$ nest generate controller user-controller

Service file is generated

// user-service.ts
import { Injectable } from ‘@nestjs/common’;
@Injectable()
export class UserService {
  getUser(){
    return “User”;
  }
}

Controller file is generated

// user-controller.controller.ts
import { Controller,Get } from '@nestjs/common';
import {UserService} from '../user-service';
@Controller('user-controller')
export class UserControllerController {
 constructor(private readonly service:UserService){}
 @Get()
 getUser(){
  return this.service.getUser()
 }
}