-
Nos testes unitários que não estão implementados, verá um
assert.fail();. Esse código deve ser removido a partir do momento que vocês começarem a escrever o teste unitário. Ele só existe para fazer o teste falhar. Se oassert.fail();não estivesse nos blocos em que não há testes unitários implementados ainda, o teste iria passar com sucesso, pois não haveria nada para ser testado dentro. -
Os comandos utilizados com mais frequência são: 6.
npm test(executa todos os testes presentes na aplicação) 7.npm test path/to/file(executa apenas os testes presentes no arquivo path/to/file)- exemplo:
npm test tests/average.spec.js
- exemplo:
O ESLint para fazer a análise estática do seu código.
Para garantir a qualidade do seu código de forma a tê-lo mais legível, de mais fácil manutenção e seguindo as boas práticas de desenvolvimento nós utilizamos neste projeto o linter ESLint. Para rodar o linter localmente no seu projeto, execute o comando abaixo:
npm run lintCaso ainda fique alguma dúvida, você pode consultar nosso conteúdo sobre ESLint
PULL REQUESTS COM ISSUES DE LINTER NÃO SERÃO AVALIADAS. ATENTE-SE PARA RESOLVÊ-LAS ANTES DE FINALIZAR O DESENVOLVIMENTO! ⚠
Utilizado o plugin do ESLint no VSCode, baixado em plugin ESLint.
A função average recebe um array (tamanho variável) e retorna a média dos valores recebidos. Caso a função receba algum valor não númerico ou um array vazio, o valor undefined deve ser retornado. Todos os resultados devem ser arredondados para valores inteiros. Ex: 4,6 vira 5; 1,3 vira 1. O arquivo average.spec.js contém os testes para average já implementados. Implemente a função no arquivo src/average.js de forma que ela atenda aos testes propostos.
O que será avaliado
- Será validado se o comportamento da função "average" está correto'.
A função numbers recebe um array (tamanho variável) e retorna true se todos os parâmetros forem do tipo 'number' e false caso contrário. Essa função já está implementada no arquivo src/numbers.js. Escreva os testes para essa função para garantir que a implementação de numbers está correta.
O que será avaliado
- Será validado se o teste da função
numbersverifica se o retorno da função étruequando o array passado por parâmetro contém somente números.
Use template literals para escrever uma função que recebe seu nome e sua idade e retorna o parágrafo descrito abaixo:
`'Oi, meu nome é Tunico!
Tenho 30 anos,
trabalho na Trybe e mando muito em programação!
#VQV!'`Caso a função seja chamada sem nenhum parâmetro, o valor undefined deve ser retornado. O arquivo vqv.spec.js contém os testes para vqv já implementados. Implemente a função no arquivo src/vqv.js de forma que ela atenda aos testes propostos.
O que será avaliado
- Será validado se a função
vqvretorna a frase esperada com nome e idade.
A função circle recebe o raio de um círculo e retorna um objeto contendo suas informações (Raio, Área e Circunferência). Se não for especificado um raio, a função retorna undefined. Essa função já está implementada no arquivo src/circle.js. Escreva os testes para essa função para garantir que a implementação de circle está correta.
O que será avaliado
- Será validado se o teste da função
circleverifica se ao receber um raio, o retorno da função é um objeto com as informações corretas (Raio, Área e Circunferência).
A função createStudent recebe como parâmetro um nome, e retorna um objeto contendo duas chaves:
(1) name, contendo o nome passado como parâmetro;
(2) feedback, contendo uma função que retorna a frase 'Eita pessoa boa!' ao ser chamada.
O arquivo createStudent.spec.js contém os testes para createStudent já implementados. Implemente a função no arquivo src/createStudent.js de forma que ela atenda aos testes propostos.
O que será avaliado
- Será validado se a função
createStudentretorna o objeto esperado.
A função productDetails recebe duas strings que representam nomes de produtos, e retorna um array contendo dois objetos com os detalhes dos respectivos produtos:
productDetails('Alcool gel', 'Máscara') // Retorna:
[
{
name: 'Alcool gel'
details: {
productId: 'Alcool gel123'
}
},
{
name: 'Máscara'
details: {
productId: 'Máscara123'
}
}
]Essa função já está implementada no arquivo src/productDetails.js. Escreva os testes para essa função no arquivo tests/productDetails.js para garantir que a implementação de productDetails está correta.
O que será avaliado
- Será validado se o teste da função
productDetailsverifica se ao receber duas strings, o retorno da função é um array de objetos e se cada objeto contém os dados necessários.
Desenvolva um objeto calculator que possui quatro chaves:
- add;
- mult;
- div;
- sub.
Para cada uma delas atribua uma função que realiza a respectiva operação. A função deve receber dois inteiros e retornar um inteiro. Os resultados das divisões devem sempre ser arredondados para baixo. O arquivo objCalculator.spec.js contém os testes para objCalculator já implementados. Implemente a função no arquivo src/objCalculator.js de forma que ela atenda aos testes propostos.
O que será avaliado
- Será validado se a função
objCalculatorretorna os valores esperados.
A função myCounter possui dois loops aninhados que inserem valores dentro de um array. Como podemos perceber, eles vão adicionando valores ao array até sua condição de parada. Corrija a função myCounter para que a função retorne o array correto. O arquivo myCounter.spec.js contém os testes para myCounter já implementados. Implemente a função no arquivo src/myCounter.js de forma que ela atenda aos testes propostos.
O que será avaliado
- Será validado se a função
myCounterretorna os dados esperados.
Agora prepare-se! Esse último requisito vai te guiar através de um longo e rico processo de desenvolvimento orientado a testes (Test Driven Development, ou TDD). Dará trabalho, mas vale a pena!
Você é responsável por escrever o código do sistema de pedidos de um restaurante. Deve ser possível, através desse sistema, cadastrar um menu. Dado que um menu foi cadastrado, o sistema deve disponibilizar um objeto através do qual se consegue:
- ler o menu cadastrado;
- fazer pedidos;
- verificar o que foi pedido;
- somar o valor da conta.
A estrutura deste código e deste objeto já foi definida e você irá implementá-lo. Você encontrará mais detalhes sobre a estrutura a ser seguida e exemplos do retorno da função no arquivo src/restaurant.js. Você deverá seguir o passo-a-passo a seguir para garantir o bom desenvolvimento do sistema.
- No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se a funçãocreateMenu(), retorna um objeto que possui, mas não é necessariamente é limitado à chavefetchMenu, a qual tem como valor uma função. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se, dado que a funçãocreateMenufoi chamada com o objeto:{ food: {}, drink: {} }, checa se'objetoRetornado.fetchMenu()'retorna um objeto cujas chaves são somentefoodedrink. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se o menu passado pra funçãocreateMenué identico ao menu recuperado pela função'objetoRetornado.fetchMenu()'. - No arquivo
src/restaurant.js, crie uma funçãocreateMenu()que, dado um objeto passado por parâmetro, retorna um objeto com o seguinte formato: { fetchMenu: () => objetoPassadoPorParametro }. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se'objetoRetornado.consumption', após a criação do menu, retorna um array vazio. - No arquivo
src/restaurant.js, adicione ao objeto retornado porcreateMenuuma chaveconsumptionque, como valor inicial, tem um array vazio. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se ao chamar uma função associada à chaveorderno objeto retornado, passando uma string como parâmetro, comoobjetoRetornado.order('coxinha'), tal string é adicionada ao array retornado em `objetoRetornado.consumption - No arquivo
src/restaurant.js, crie uma função, separada da funçãocreateMenu(), que, dada uma string recebida por parâmetro, adiciona essa string ao array deobjetoRetornado.consumption. Adicione essa função à chaveorder. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se as três orders seguintes, de bebidas e comidas mescladas, somam três itens no arrayobjetoRetornado.consumptionconforme os itens pedidos. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica se a funçãoorderaceita que pedidos repetidos sejam acrescidos a consumption. - No arquivo
tests/restaurant.spec.js, escreva um teste que verifica que, ao chamarobjetoRetornado.pay(), retorna-se a soma dos preços de tudo que foi pedido, conforme registrado emobjetoRetornado.consumption. - No arquivo
src/restaurant.js, adicione ao objeto retornado porcreateMenu()uma chavepaycom uma função que varre todo os itens deobjetoRetornado.consumption, soma o preço de todos checando-os no menu e retorna o valor somado acrescido de 10%. DICA: para isso, você precisará varrer tanto o objeto da chavefoodquanto o objeto da chavedrink.
O que será avaliado
- Será validado se a função
createMenuretorna os dados esperados. - Será validado se o teste da função
createMenuverifica cada um dos retornos da função e se estes retornos têm o comportamento esperado.