Skip to content

Instantly share code, notes, and snippets.

@roger-dev-br
Last active August 13, 2021 22:13
Show Gist options
  • Save roger-dev-br/7a320532465e9b6aa9495f5cd63f5e9b to your computer and use it in GitHub Desktop.
Save roger-dev-br/7a320532465e9b6aa9495f5cd63f5e9b to your computer and use it in GitHub Desktop.
JEST com Typescript

JEST

Instalar bibliotecas de Desenvolvimento

yarn add -D jest 
yarn add -D @types/jest
yarn add -D supertest
yarn add -D @types/supertest
yarn add -D sqlite3

Instalar bibliotecas de Produção

yarn add ts-jest

Instalar o CROSSENV

yarn add cross-env

Configurar o JEST

Criar o arquivo jest.config.js na raiz do projeto

module.exports = {
  // arquivos que vão entrar no coverage
  collectCoverageFrom: ['<rootDir>/src/**/*.ts'],

  // pasta aonde vai ser colocado os arquivos do coverage
  coverageDirectory: "coverage",

  // pastas que vão ser ignoradas no coverage
  coveragePathIgnorePatterns: [
    "\\\\node_modules\\\\",
    "<rootDir>/src/core/infra/data/database/migrations",
  ], // é ignorado as migrations no coverage

  // defini a pasta principal dos testes
  roots: [
    "<rootDir>/tests"
  ],

  // o ambiente onde será executado os testes, como estamos no backend é o node
  testEnvironment: "node",

  // usa o transform para o jest transpilar arquivos typescript
  transform: {
    '.+\\.ts$': 'ts-jest'
  },
};

Configurar o JEST para testes unitários jest-unit.config.js

const config = require('./jest.config');

// defini que os testes unitários vão ser somente os arquivos que possuem o .spec
config.testMatch=['**/*.spec.ts'];

module.exports = config;

Configurar scripts de TESTE

  "scripts": {
    "dev": "ts-node-dev --respawn --transpile-only src/server.ts",
    "dev:debug": "ts-node-dev --inspect=0.0.0.0:9229 --respawn --transpile-only src/server.ts",
    "build": "tsc",
    "test:setup": "yarn rimraf testdb.sql && yarn migration:run:test",
    "test": "yarn test:setup && cross-env NODE_ENV=test yarn jest --passWithNoTests --silent --noStackTrace --runInBand",
    "test:verbose": "yarn test:setup && cross-env NODE_ENV=test yarn jest --passWithNoTests --runInBand --detectOpenHandles",
    "test:unit": "yarn test --watchAll -c jest-unit.config.js",
    "test:integration": "yarn test --watchAll -c jest-integration.config.js",
    "test:coverage": "yarn test --coverage", 
    "migration:show": "ts-node --transpile-only node_modules/typeorm/cli.js migration:show",
    "migration:run": "ts-node --transpile-only node_modules/typeorm/cli.js migration:run",
    "migration:revert": "ts-node --transpile-only node_modules/typeorm/cli.js migration:revert",
    "migration:run:test": "cross-env NODE_ENV=test yarn ts-node-dev ./node_modules/typeorm/cli.js migration:run"
  },

Descrição das flags

--watch: fica observando os arquivos de teste e sempre que é feito alguma alteracao no teste ele é executado automaticamente

--coverage: executa a cobertura do código, ou seja, ele vê quantos % do código está testado

--noStackTrace: desabilita o rastreio de código no console, ou seja, se um teste estourar um erro, não é mostrado 
a stackTrack no console

--passWithNoTests: permite que os testes passe quando não são encontrados arquivos

--runInBand: executa todos os testes em sequência, de modo normal os testes são executados em conjunto através de workers,
com essa opção cada teste é executado de forma sequencial.

--silent: evita que os testes mostram mensagens no console

Criar a pasta tests no ROOT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment