Iniciando
Instale Jest usando seu gerenciador de pacotes favorito:
- npm
- Yarn
- pnpm
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
Vamos começar por escrever um teste para uma função hipotética que soma dois números. Primeiro, crie um arquivo sum.js
:
function sum(a, b) {
return a + b;
}
module.exports = sum;
Em seguida, crie um arquivo chamado sum.test.js
. Este irá conter o nosso teste real:
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Adicione a seguinte seção ao seu package.json
:
{
"scripts": {
"test": "jest"
}
}
Por fim, execute yarn test
ou npm run test
e o Jest irá imprimir a seguinte mensagem:
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)
Você escreveu com sucesso seu primeiro teste usando Jest!
Este teste usou expect
e toBe
para testar que dois valores eram exatamente idênticos. Para saber mais sobre as outras coisas que Jest pode testar, consulte Usando Matchers.
Executando a partir da linha de comando
Você pode executar Jest diretamente da CLI (se ele estiver disponível globalmente em seu PATH
, por exemplo: yarn global add jest
ou npm install -g jest
) com uma variedade de comandos úteis.
Aqui vemos como executar Jest em arquivos que correspondam ao my-test
, usando config.json
como um arquivo de configuração e exibir uma notificação nativa no Sistema Operacional após a execução:
jest my-test --notify --config=config.json
Se você gostaria de aprender mais sobre como executar jest
através da linha de comando, dê uma olhada na página Opções de CLI Jest.
Configuração adicional
Gerando um arquivo de configuração básico
Com base no seu projeto, o Jest fará algumas perguntas e irá criar um arquivo básico de configuração com uma breve descrição para cada opção:
jest --init
Usando Babel
Para usar Babel, instale as dependências necessárias:
- npm
- Yarn
- pnpm
npm install --save-dev babel-jest @babel/core @babel/preset-env
yarn add --dev babel-jest @babel/core @babel/preset-env
pnpm add --save-dev babel-jest @babel/core @babel/preset-env
Configure o Babel para marcar a sua versão atual do Node criando um arquivo babel.config.js
na raiz do seu projeto:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
A configuração ideal para o Babel dependerá do seu projeto. Veja a documentação do Babel para mais detalhes.
Making your Babel config jest-aware
Jest definirá process.env.NODE_ENV
para 'test'
se não estiver definido para outra coisa. Você pode usar isso em sua configuração para configurar condicionalmente apenas a compilação necessária para Jest, por exemplo.
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
babel-jest
é instalado automaticamente quando instalar Jest e irá automaticamente transformar arquivos caso uma configuração de babel existir em seu projeto. Para evitar esse comportamento, você pode redefinir explicitamente a opção de configuração de transform
:
module.exports = {
transform: {},
};
Usando webpack
Jest pode ser usado em projetos que usam webpack para gerenciar assets, estilos e compilação. webpack oferece alguns desafios únicos em relação à outras ferramentas. Consulte o guia do webpack para começar.
Usando Vite
Jest pode ser utilizado em projetos que usam vite para servir código-fonte a partir de ESM nativo, fornecendo algumas ferramentas do frontend, vite é uma ferramenta opinativa e oferece alguns workflows diferenciados. Jest não é totalmente suportado pelo vite devido a como o sistema de plugins do vite funciona, mas há alguns exemplos para a integração de primeira classe usando vite-jest
. Já que isto não é totalmente suportado, você deve ler também a limitação do vite-jest
. Consulte o guia de vite para começar.
Usando Parcel
Jest pode ser usado em projetos que usam parcel-bundler para gerenciar ativos, estilos, e compilação semelhante ao webpack. Parcel requer configuração zero. Veja a documentação oficial para começar.
Usando TypeScript
Via babel
O Jest suporta TypeScript, via Babel. Primeiro certifique-se que você seguir as instruções em usando o Babel acima. Em seguida, instale o @babel/preset-typescript
:
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
Então adicione o @babel/preset-typescript
à lista de presets em seu babel.config.js
.
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
No entanto, há algumas ressalvas para usar TypeScript com Babel. Como o suporte para TypeScript em Babel é puramente transpilação, Jest não irá checar seus testes enquanto eles são executados. Se você quiser isso, você pode usar ts-jest em vez disso. ou apenas execute o compilador TypeScript tsc separadamente (ou como parte de seu processo de compilação).
Via ts-jest
ts-jest is a TypeScript preprocessor with source map support for Jest that lets you use Jest to test projects written in TypeScript.
- npm
- Yarn
- pnpm
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
Para que Jest interprete TypeScript com ts-jest
, talvez você precise criar um arquivo de configuração.
Definições de tipo
Existem duas maneiras de ter Jest global APIs tipado para arquivos de teste escritos em TypeScript.
Você pode usar as definições de tipo que já vem com o Jest e serão atualizadas a cada vez que você atualizar o Jest. Instale o pacote @jest/globals
:
- npm
- Yarn
- pnpm
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
E importe as APIs de:
import {describe, expect, test} from '@jest/globals';
import {sum} from './sum';
describe('sum module', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
});
Veja a documentação de uso adicional de describe.each
/test.each
e funções de simulação (mock, em inglês)
.
Ou você pode escolher instalar o pacote @types/jest
. Ele fornece tipos para os globais do Jest sem necessidade de importá-los.
- npm
- Yarn
- pnpm
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
@types/jest
is a third party library maintained at DefinitelyTyped, hence the latest Jest features or versions may not be covered yet. Tente coincidir com versões do Jest e @types/jest
o mais próximo possível. Por exemplo, se você estiver usando a versão 27.4.0 do jest
, então instalar 27.4.x
de @types/jest
é ideal.
Usando ESLint
Jest pode ser usado com o ESLint sem qualquer configuração adicional, desde que você importe os ajudantes globais do Jest (describe
, it
, etc.) do @jest/globals
antes de usá-los em seus arquivos de teste. Isso é necessário para evitar erros no-undef
do ESLint, que não conhece sobre os globais do Jest.
Se quiser evitar essas importações, você pode configurar seu ambiente ESLint para suportar esses globais adicionando o ambiente jest
:
{
"overrides": [
{
"files": ["tests/**/*"],
"env": {
"jest": true
}
}
]
}
Ou usar o eslint-plugin-jest
que tem um efeito similar:
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}