Nashar410 / esgi-test-unit-nestjs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Description

Ce projet a été créée pour le cours de Test unitaire et foncitonnel de la 4IW3 de l'ESGI. Il utilise NestJs, un puissant framework backend utilisant NodeJS et Typescript : Nest framework TypeScript starter repository.

Particularité

Emplacement des fichiers de tests unitaires

Conformément aux best practices fournis par la documentation de NestJS, les fichiers de test unitaire sont à placer au plus prêt des classes testées. Il s'agit de tous les fichiers se terminant par *.spec.ts.

DTO et class-validator

Toujours conformément aux best practices du framework, les données circulent dans le back sous forme de DTO : des class mimant les class des entités qui persisteront dans la base de données. NestJS recommandant l'utilisation de class-validator, un framework permettant une vérification automatique des propriétés selon un schéma fourni. Nous l'avons directement intégré aux DTO. En voici un exemple :

// DTO pour la création d'un utilisateur
export class CreateUserDto {

  @IsUUID('all', {  // Décorateur de class-validator vérifiant si la propriété "id" est un uuid
    message: Constants.ERROR_MSG_IS_UUID, // Surchage du message d'erreur
  })
  @IsString({ //  Décorateur de class-validator vérifiant si la propriété "id" est un string
    message: Constants.ERROR_MSG_IS_STRING, // Surchage du message d'erreur
  })
  @IsNotEmpty({  //Décorateur de class-validator vérifiant si la propriété "id" n'est pas vide
    message: Constants.ERROR_MSG_IS_NOT_EMPTY, // Surchage du message d'erreur
  })
  id: string;

  @IsEmail(
    { allow_display_name: false }, // Option, spécifique à ce décorator
    {
      message: Constants.ERROR_MSG_IS_EMAIL,
    },
  )
  @IsString({
    message: Constants.ERROR_MSG_IS_STRING,
  })
  @IsNotEmpty({
    message: Constants.ERROR_MSG_IS_NOT_EMPTY,
  })
  email: string;

  ...

  @IsUserHaveMinimumAge({ // Custom @ pour une validation personnalisée de la propriété "birthDate"
    message: Constants.ERROR_MSG_USER_WRONG_AGE,
  })
  @IsDate({
    message: Constants.ERROR_MSG_IS_DATE,
  })
  @IsNotEmpty({
    message: Constants.ERROR_MSG_IS_NOT_EMPTY,
  })
  birthDate: Date;

  @IsOptional()
  todolist: Todolist;

  // Constructeur générique
  constructor(user: Partial<User>) {
    Object.assign(this, user);
  }
}

Installation

$ npm install

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

Test

# unit tests
$ npm run test

Contributeur

  • LIMA Milan
  • JACQUENET Jean Christophe

Support

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.

Stay in touch

License

Nest is MIT licensed.

About


Languages

Language:TypeScript 98.7%Language:JavaScript 1.3%