yarn add -D jest
yarn add -D @types/jest
yarn add -D supertest
yarn add -D @types/supertest
yarn add -D sqlite3
yarn add ts-jest
yarn add cross-env
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'
},
};
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;
"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"
},
--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