Data: 24/05/2021
Tempo de curso: 1 mês e 19 dias
O objetivo desse projeto era testar nosso conhecimento no desnvolvimento de funções que passassem nos testes já escritos, assim como escrever testes que testassem de forma eficiente as funções que já estavam implementadas. Nesse projeto utilize JavaScript
.
Nesse projeto, você será capaz de:
- Escrever testes unitários para funções utilizando o módulo Assert do NodeJS para verificar o correto funcionamento dessas funções;
- A partir de testes já implementados, escrever funções de forma que elas atendam aos testes propostos;
- Escrever testes e funções utilizando uma abordagem de desenvolvimento orientado a testes.
- Arquivos da pasta
src
- Arquivos da pasta
tests
Nem todas as funções e testes foram escritos por mim, em alguns casos desenvolvi as funções e em outros os testes, conforme requisitos abaixo.
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
numbers
verifica se o retorno da função é um array e se o array retornado 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
vqv
retorna 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
circle
verifica 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
createStudent
retorna 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
productDetails
verifica 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
objCalculator
retorna 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
myCounter
retorna 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çãocreateMenu
foi chamada com o objeto:{ food: {}, drink: {} }
, checa se'objetoRetornado.fetchMenu()'
retorna um objeto cujas chaves são somentefood
edrink
. - 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 porcreateMenu
uma chaveconsumption
que, 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 à chaveorder
no 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.consumption
conforme os itens pedidos. - No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se a funçãoorder
aceita 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 chavepay
com 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 chavefood
quanto o objeto da chavedrink
.
O que será avaliado
- Será validado se a função
createMenu
retorna os dados esperados. - Será validado se o teste da função
createMenu
verifica cada um dos retornos da função e se estes retornos têm o comportamento esperado.