Configurando Jest no Angular
Projeto criado para explicar como se remove o Karma e Jasmine e adiciona e configura o Jest.
Caso queria ver o artigo acesse:
Posted on August 18, 2020
Eu estou criando este artigo pois ao começar meus estudos no mundo dos testes, me deparei com o seguinte problema, vou utilizar Angular para criar uma aplicação e por padrão ele utiliza Karma e Jasmine, porém não vou utilizar estes caras para testar e sim o tal do Jest.
Não vou falar sobre quem é melhor ou pior(até por que eu nem sei), mas o fato é que eu preciso do Jest configurado no meu projeto para iniciar meus testes com teste(HAHAHAHAHA).
Porém dei uma olhada no State Of JS e o nível de interesse e satisfação a respeito do Jest se encontra assim:
Caso queira saber mais é só entrar neste link: State of js
Para configurar o Jest em seu projeto com Angular(e até mesmo rodar o projeto), vamos precisar dos seguintes programas instalados:
npm: Gerenciador de pacotes para a linguagem de programação JavaScript;
node: Trata-se de um software open-source, cross-platform e runtime para JavaScript;
npx: Package runner que permite executar código criado com Node.js e publicado por meio do registro NPM;
Primeiro vamos entender o cenário do seu projeto, possivelmente você deve estar usando Karma e Jasmine e quer mudar para o Jest, caso seja isto continue a leitura do artigo.
Se você criou sua aplicação Angular utilizando o parâmetro --minimal=true
, clique aqui para pular algumas etapas desnecessárias.
Então vamos separar este artigo em diversas parte:
✔️ Removendo o Karma e o Jasmine do seu projeto;
✔️ Adicionando as dependências do Jest
✔️ Configurando o Jest no projeto
✔️ BÔNUS: Configurando o Jest no comando ng
do Angular
Como não vamos mais utilizar algumas dependências, precisamos remover toda configuração e arquivos que se encontra no projeto que é desnecessário.
npm uninstall karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter @types/jasmine @types/jasminewd2 jasmine-core jasmine-spec-reporter protractor
Ao rodar o comando acima você vai remover Karma e Jasmine das devDependencies do package.json
Os arquivos karma.conf.js
, test.ts
e a pasta e2e
não são mais necessários, podemos deletar os três.
Karma.conf.js
se encontra na raiz da aplicação:
./karma.conf.js
test.ts
se encontra dentro da pasta src
que está na raiz da aplicação:
./src/test.ts
A pasta e2e
se encontra na raiz do projeto:
./e2e
O arquivo tsconfig.spec.json
vai ser necessário, então vamos apenas apagar o seu conteúdo.
angular.json
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
}
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "project-with-test:serve"
},
"configurations": {
"production": {
"devServerTarget": "project-with-test:serve:production"
}
}
}
Os caras acima são responsáveis por fazer funcionar o comando:
ng test
e
ng e2e
Pelo que eu vi(mas posso estar errado) uma prática normal é criar no package.json
um script novo para rodar o Jest, exemplo:
"test": "jest --passWithNoTests",
"test:watch": "jest --watch --passWithNoTests",
"test:watchAll": "jest --watchAll --passWithNoTests",
Porém vamos configurar o Jest no angular.json
para suportar o uso do comando ng
:
"test": "ng test --passWithNoTests",
"test:watch": "ng test --watch --passWithNoTests",
"test:watchAll": "ng test --watchAll --passWithNoTests",
Mas não agora, vamos deixar isto por ultimo e usar o comando:
npx jest
deixando o comando do jeito que ele veio:
"test": "ng test",
Ele não irá funcionar, provavelmente dando o seguinte erro:
An unhandled exception occurred: No projects support the 'test' target.
Pois você removeu a configuração no angular.json
.
Legal, se você vem de um projeto com Karma e Jasmine configurado, agora não tem mais nada de teste no seu projeto e se iguala a um projeto criado com o argumento --minimal=true
Exemplo:
ng new project-without-test-and-more --minimal=true
Com o comando abaixo instalaremos as dependências para o Jest funcionar:
npm install --save-dev jest @types/jest jest-preset-angular
jest: Framework de testes em JavaScript com um foco na simplicidade;
@types/jest: Tipos do Jest para o TypeScript poder funcionar corretamente;
jest-preset-angular: Predefinições para o Jest;
Após as dependências do Jest instaladas vamos iniciar a configuração no projeto.
setupJest.ts
Crie o arquivo na raiz do seu projeto chamado setupJest.ts
e importe o modulo jest-preset-angular
, vai ficar assim o arquivo:
import 'jest-preset-angular';
tsconfig.spec.json
Altere o arquivo tsconfig.spec.json
, caso não tenha, crie ele na raiz do seu projeto.
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jest",
"node"
]
},
"files": [
"src/polyfills.ts"
],
"include": [
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}
package.json
Adicione o código abaixo dentro do arquivo package.json
:
"jest": {
"preset": "jest-preset-angular",
"setupFilesAfterEnv": [
"<rootDir>/setupJest.ts"
],
"testPathIgnorePatterns": [
"<rootDir>/node_modules/",
"<rootDir>/dist/",
"<rootDir>/src/test.ts"
],
"globals": {
"ts-jest": {
"tsConfig": "<rootDir>/tsconfig.spec.json",
"stringifyContentPathRegex": "\\.html$"
}
}
}
OK, Jest configurado agora é só rodar o seguinte comando para ver a magia acontecer:
npx jest
ng
do Angular
Agora vamos adicionar a execução do Jest junto ao comando:
npm run test
Para isso precisamos instalar a dependência:
npm install --save-dev @angular-builders/jest
e configurar o arquivo angular.json
adicionando o seguinte código:
"test": {
"builder": "@angular-builders/jest:run"
}
Com isso agora é só rodar o comando:
npm run test
e sua aplicação está apta a rodar o Jest utilizando o Angular.
Caso queira ver na prática, segue o projeto com a remoção do Karma e Jasmine e a adição e configuração do Jest.
Caso eu não tenha abordado algum problema deixa nos comentários que eu vou estudar e adicionar no artigo(ou não)
Posted on August 18, 2020
Sign up to receive the latest update from our blog.