Implementação de várias funções na resolução dos requisitos propostos e/ou testes unitários para garantir que as implementações das funções estão corretas, de acordo com o que está sendo solicitado em cada enunciado.
Habilidades desenvolvidas
- Escrever testes unitários utilizando o módulo Jest do NodeJS para verificar o correto funcionamento das funções;
- Escrever funções de forma que elas atendam a testes já implementados;
- Escrever testes e funções utilizando uma abordagem de desenvolvimento orientado a testes.
npm run lint
no seu terminal para verificar os checks do Linter 😉
A função `average` recebe um array de tamanho variável e retorna a média dos valores recebidos. Caso a função receba algum valor não numérico 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á testado:
- A função
average
deve retornar a média de seus valores ao receber um array de números; - A função
average
deve retornarundefined
ao receber um array que contém valores não numéricos; - A função
average
deve retornarundefined
ao receber um array vazio.
A função `numbers` recebe um array de 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 pelo menos quatro testes para essa função para garantir que a implementação de numbers
está correta.
O que será testado:
- A função
numbers
deve retornartrue
quando o array passado por parâmetro contém somente números.
Use template literals para escrever a função `vqv` que recebe o seu nome e a 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 vqv
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á testado
vqv
deve ser uma função;- A função
vqv
deve retornar dados do tipo string; - A função
vqv
deve retornar a frase esperada quando passados parâmetros de nome e idade; - A função
vqv
deve retornarundefined
quando chamada sem parâmetro.
A função `circle` recebe o raio de um círculo e retorna um objeto contendo as 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 pelo menos seis testes para essa função para garantir que a implementação de circle
está correta.
O que será testado
- O teste da função
circle
, ao receber um raio, deve retornar 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:
- name, contendo o nome passado como parâmetro;
- 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á testado
- A função
createStudent
deve retornar um objeto que contenha duas chaves:name
, contendo o nome passado como parâmetro; efeedback
, contendo uma função que retorna a frase"Eita pessoa boa!"
ao ser chamada.
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 pelo menos cinco testes para essa função no arquivo tests/productDetails.js
para garantir que a implementação de productDetails
está correta.
O que será testado
- O teste da função
productDetails
, ao receber duas strings, deve retornar um array de objetos e se cada objeto contém os dados necessários.
A função `calculator` recebe dois números inteiros como parâmetro e retorna um objeto com as seguintes chaves:
- sum; - mult; - div; - sub.
Para cada chave atribua como valor a operação correspondente à sua chave:
sum:
retorna o resultado da soma dos dois números;mult:
retorna o resultado da multiplicação dos dois números;div:
retorna o resultado da divisão dos dois números;sub:
retorna o resultado da subtração dos dois números.
Os resultados das divisões devem sempre ser arredondados para baixo.
Parâmetros:
- Dois números inteiros.
Comportamento:
calculator(1, 2); // { sum: 3, mult: 2, div: 0, sub: -1 }
Já a função arrayGenerator
converte objetos em arrays, de chaves, valores ou ambos. Ela deve receber dois parâmetros:
- o primeiro parâmetro deve ser uma string que indica o tipo de conversão;
- o segundo parâmetro deve ser um objeto semelhante ao que é retornado pela função calculator que você acabou de desenvolver.
Parâmetros:
- Uma string que indica o tipo de conversão;
- Um objeto no formato { sum: 3, mult: 2, div: 0, sub: -1 };
Comportamento:
arrayGenerator('keys', { sum: 3, mult: 2, div: 1, sub: 0 }) // [ 'sum', 'mult', 'div', 'sub' ]
arrayGenerator('values', { sum: 3, mult: 2, div: 1, sub: 0 }) // [ 3, 2, 1, 0 ]
arrayGenerator('entries', { sum: 3, mult: 2, div: 1, sub: 0 }) // [ [ 'sum', 3 ], [ 'mult', 2 ], [ 'div', 1 ], [ 'sub', 0 ] ]
O arquivo objPlayground.spec.js
contém os testes para calculator
e arrayGenerator
já implementados. Implemente as funções no arquivo src/objPlayground.js
de forma que ela atenda aos testes propostos.
O que será testado
- A função
calculator
deve retornar os valores esperados; - A função
arrayGenerator
deve retornar 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
, sem eliminar nenhum dos loops de repetição, 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á testado
- A função
myCounter
deve retornar os dados esperados de acordo com o que está implementado no teste.
A função `getCharacter` recebe uma string que representa o nome de uma personagem e retorna um objeto contendo o seu nome, a sua classe e as suas frases.
getCharacter('Arya');
Retorna:
{
name: 'Arya Stark',
class: 'Rogue',
phrases: ['Not today', 'A girl has no name.']
}
Essa função já está implementada no arquivo src/getCharacter.js
. Escreva pelo menos seis testes para essa função no arquivo tests/getCharacter.spec.js
para garantir que a implementação de getCharacter
está correta.
O que será testado
- O teste da função
getCharacter
ao receber uma string, deve retornar os dados esperados de acordo com a tabela apresentada no arquivo de testes. - O teste da função
getCharacter
ao não receber nenhum parâmetro, deve retornarundefined
. - O teste da função
getCharacter
deve verificar se o parâmetro é case sensitive.
Esse último requisito vai guiar você por um rico processo de Desenvolvimento Orientado a Testes ou TDD - Test Driven Development
Imagine a seguinte situação: você é responsável por escrever o código do sistema de pedidos de um restaurante através do qual será possível cadastrar um menu. Dado que um menu foi cadastrado, o sistema deve disponibilizar um objeto que permite:
- 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á está definida e você precisa implementá-la. Você encontrará mais detalhes sobre a estrutura a ser seguida e exemplos do retorno da função no arquivo src/restaurant.js
.
Você deverá se orientar através dos tópicos abaixo para garantir o bom desenvolvimento do sistema.
IMPORTANTE - BOAS PRÁTICAS TDD: COMECE PELO TESTE 1 DO ARQUIVO tests/restaurant.spec.js
Se surgirem dúvidas, não deixe de consultar o nosso conteúdo sobre TDD.
-
No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se a funçãocreateMenu()
retorna um objeto que possui a chavefetchMenu
, a qual tem como valor uma função. -
No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se'objetoRetornado.fetchMenu()'
retorna um objeto cujas chaves são somentefood
edrink
, considerando que a funçãocreateMenu()
foi chamada com o objeto:{ food: {}, drink: {} }
. -
No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se o menu passado pra funçãocreateMenu()
é idêntico ao menu recuperado pela função'objetoRetornado.fetchMenu()'
. -
No arquivo
src/restaurant.js
, crie uma funçãocreateMenu()
que, recebendo um objeto como parâmetro, retorna esse 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 emobjetoRetornado.consumption
. -
No arquivo
src/restaurant.js
, crie uma função, separada da funçãocreateMenu()
, que, ao receber uma string como parâmetro, adiciona essa string ao array deobjetoRetornado.consumption
. Essa nova função será adicionada à chaveorder
. -
No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se ao adicionar três pedidos, dentre bebidas e comidas, o arrayobjetoRetornado.consumption
contém os itens pedidos. -
No arquivo
tests/restaurant.spec.js
, escreva um teste que verifica se a funçãoorder
aceita que pedidos repetidos sejam acrescidos aconsumption
. -
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 percorre por todos os itens deobjetoRetornado.consumption
, soma o preço deles e retorna o valor somado acrescido de 10%. DICA: para isso, você precisará percorrer tanto o objeto da chavefood
quanto o objeto da chavedrink
.
O que será testado
- A função
createMenu()
deve retornar os dados esperados. - O teste da função
createMenu()
deve verificar cada um dos retornos da função e se estes retornos têm o comportamento esperado.