{"id":28223432,"url":"https://github.com/lmuffato/project-js-unit-tests-trybe","last_synced_at":"2026-07-02T09:31:21.772Z","repository":{"id":139798688,"uuid":"412901070","full_name":"lmuffato/Project-js-unit-tests-Trybe","owner":"lmuffato","description":"Projeto JS Unit Tests - Projeto avaliativo da Trybe do Bloco 07: Introdução à JavaScript ES6 e Testes Unitários","archived":false,"fork":false,"pushed_at":"2021-10-02T20:09:05.000Z","size":3639,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"lmuffato-js-unit-tests","last_synced_at":"2025-10-19T19:56:17.731Z","etag":null,"topics":["tests","trybe-projects","unit-testing"],"latest_commit_sha":null,"homepage":"https://github.com/tryber/sd-010-a-project-js-unit-tests","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lmuffato.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-10-02T20:08:11.000Z","updated_at":"2021-11-22T23:34:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"25e5cf5e-af5c-4c3a-828f-3a68332d4137","html_url":"https://github.com/lmuffato/Project-js-unit-tests-Trybe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lmuffato/Project-js-unit-tests-Trybe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmuffato%2FProject-js-unit-tests-Trybe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmuffato%2FProject-js-unit-tests-Trybe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmuffato%2FProject-js-unit-tests-Trybe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmuffato%2FProject-js-unit-tests-Trybe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lmuffato","download_url":"https://codeload.github.com/lmuffato/Project-js-unit-tests-Trybe/tar.gz/refs/heads/lmuffato-js-unit-tests","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lmuffato%2FProject-js-unit-tests-Trybe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35041996,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tests","trybe-projects","unit-testing"],"created_at":"2025-05-18T08:09:37.225Z","updated_at":"2026-07-02T09:31:21.759Z","avatar_url":"https://github.com/lmuffato.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Termos de acordos\n\nAo iniciar este projeto, você concorda com as diretrizes do Código de Ética e Conduta e do Manual da Pessoa Estudante da Trybe.\n\n# Boas vindas ao repositório do projeto ES6 Testes Unitários!\n\nVocê já usa o GitHub diariamente para desenvolver os exercícios, certo? Agora, para desenvolver os projetos, você deverá seguir as instruções à seguir. Tenha atenção a cada passo, e se tiver qualquer dúvida, nos envie por _Slack_! #vqv 🚀\n\nAqui você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto à partir deste repositório, utilizando uma branch específica e um _Pull Request_ para colocar seus códigos.\n\n\n---\n\n## SUMÁRIO\n\n- [Habilidades](#habilidades)\n- [O que será desenvolvido](#o-que-será-desenvolvido)\n- [Data de entrega](#data-de-entrega)\n- [Como desenvolver](#como-desenvolver)\n  - [Antes de começar a desenvolver](#antes-de-começar-a-desenvolver)\n- [Requisitos do projeto](#requisitos-do-projeto)\n- [Lista de requisitos](#lista-de-requisitos)\n  - [Implemente a função average](#implemente-a-função-average)\n  - [Implemente os casos de teste para a função numbers](#implemente-os-casos-de-teste-para-a-função-numbers)\n  - [Implemente a função vqv](#implemente-a-função-vqv)\n  - [Implemente os casos de teste para a função circle](#implemente-os-casos-de-teste-para-a-função-circle)\n  - [Implemente a função createStudent](#implemente-a-função-createStudent)\n  - [Implemente os casos de teste para a função productDetails](#implemente-os-casos-de-teste-para-a-função-productDetails)\n  - [Implemente a função objCalculator](#Implemente-a-função-objCalculator)\n  - [Implemente a função myCounter](#implemente-a-função-myCounter)\n  - [Implemente os casos de teste e a função createMenu](#implemente-os-casos-de-teste-e-a-função-createMenu)\n- [Instruções para entregar seu projeto](#instruções-para-entregar-seu-projeto)\n  - [Durante o desenvolvimento](#durante-o-desenvolvimento)\n  - [Depois de terminar o desenvolvimento (opcional)](#depois-de-terminar-o-desenvolvimento-opcional)\n  - [Revisando um Pull Request](#revisando-um-pull-request)\n- [Avisos finais](#avisos-finais)\n\n---\n\n## Habilidades\n\nNesse projeto, você será capaz de:\n\n- Escrever testes unitários para funções utilizando o módulo Assert do NodeJS para verificar o correto funcionamento dessas funções;\n- A partir de testes já implementados, escrever funções de forma que elas atendam aos testes propostos;\n- Escrever testes e funções utilizando uma abordagem de desenvolvimento orientado a testes (TDD).\n\n---\n\n## O que será desenvolvido\n\nVocê implementará várias funções para atender aos requisitos propostos e/ou testes unitários para garantir que as implementações das funções estão corretas.\n\n---\n\n## Data de entrega\n\n  - Projeto individual;\n\n  - Será um dia de projeto;\n\n  - O projeto tem até a seguinte data: `02/04/2021 - 14:00h` para ser entregue a avaliação final.\n\n---\n\n## Como desenvolver\n\n### Antes de começar a desenvolver:\n\n1. Clone o repositório\n  * `git clone git@github.com:tryber/sd-010-a-project-js-unit-tests.git`.\n  * Entre na pasta do repositório que você acabou de clonar:\n    * `cd sd-010-a-project-js-unit-tests`\n\n2. Instale as dependências\n  * `npm install`\n\n3. Crie uma branch a partir da branch `master`\n  * Verifique que você está na branch `master`\n    * Exemplo: `git branch`\n  * Se não estiver, mude para a branch `master`\n    * Exemplo: `git checkout master`\n  * Agora crie uma branch para qual você vai submeter os `commits` do seu projeto\n    * Você deve criar uma branch no seguinte formato: `nome-de-usuario-nome-do-projeto`\n    * Exemplo: `git checkout -b joaozinho-js-unit-tests`\n\n4. Faça as alterações em, por exemplo, alguma das funções que precisam de implementação. Por exemplo, a `average.js` em `src/`:\n```jsx\nconst average = () =\u003e {\n  // add your implementation here\n}\n\nmodule.exports = average\n```\n\n5. Adicione as mudanças ao _stage_ do Git e faça um `commit`\n  * Verifique que as mudanças ainda não estão no _stage_\n    * Exemplo: `git status` (deve aparecer listado o arquivo _src/last.js_ em vermelho)\n  * Adicione o arquivo alterado ao _stage_ do Git\n      * Exemplo:\n        * `git add .` (adicionando todas as mudanças - _que estavam em vermelho_ - ao stage do Git)\n        * `git status` (deve aparecer listado o arquivo _src/last.js_ em verde)\n  * Faça o `commit` inicial\n      * Exemplo:\n        * `git commit -m 'iniciando o projeto. VAMOS COM TUDO :rocket:'` (fazendo o primeiro commit)\n        * `git status` (deve aparecer uma mensagem tipo _nothing to commit_ )\n\n6. Adicione a sua branch com o novo `commit` ao repositório remoto\n  * Usando o exemplo anterior: `git push -u origin joaozinho-js-unit-tests`\n\n7. Crie um novo `Pull Request` _(PR)_\n  * Vá até a página de _Pull Requests_ do [repositório no GitHub](https://github.com/tryber/sd-010-a-project-js-unit-tests/pulls)\n  * Clique no botão verde _\"New pull request\"_\n  * Clique na caixa de seleção _\"Compare\"_ e escolha a sua branch **com atenção**\n  * Clique no botão verde _\"Create pull request\"_\n  * Adicione uma descrição para o _Pull Request_ e clique no botão verde _\"Create pull request\"_\n  * **Não se preocupe em preencher mais nada por enquanto!**\n  * Volte até a [página de _Pull Requests_ do repositório](https://github.com/tryber/sd-010-a-project-js-unit-tests/pulls) e confira que o seu _Pull Request_ está criado\n\n---\n\n## Requisitos do projeto\n\nEste repositório contém um _template_ de uma aplicação **NodeJS** (observe a existência do arquivo _package.json_).\nApós clonar o projeto e instalar as dependências, você não precisará realizar nenhuma configuração adicional.\nTodos os arquivos estritamente necessários para finalizar o projeto já estão criados, **não** sendo necessária a criação de outros arquivos.\nVocê deverá completar as funções e testes unitários de forma a satisfazer os requisitos listados na seção **Lista de requisitos**.\n\nAs funções a serem implementadas estão dentro da pasta `src` e seus respectivos testes estão na pasta `tests`.\nO nome dos arquivos também seguem uma ordem definida. Basicamente, os arquivos de teste possuem o nome do arquivo alvo (arquivo da funcionalidade) acrescido do nome `.spec.js`.\nExistirá um arquivo `src/exemplo.js` que conterá a implementação de uma função e um arquivo `tests/exemplo.spec.js` com os testes unitários referentes à função presente no arquivo `src/exemplo.js`.\n\nCada função possui um bloco de comentários em suas primeiras linhas explicando qual é o trabalho que a função deve realizar.\n\nVocê só deve alterar os arquivos indicados nos requisitos. **Os arquivos que não estão indicados nos requisitos não devem ser alterados, ou sua avaliação poderá ser comprometida.**\n\nPara entregar o seu projeto você deverá criar um _Pull Request_ neste repositório. Este _Pull Request_ deverá conter a implementação dos arquivos solicitados abaixo.\n\n**⚠️ É importante que seus arquivos tenham exatamente estes nomes! ⚠️**. Apesar de não ser necessário para ser aprovado no projeto, você pode adicionar outros arquivos se julgar necessário. Qualquer dúvida, procure o time de instrução.\n\nLembre-se que você pode consultar nosso conteúdo sobre [Git \u0026 GitHub](https://course.betrybe.com/intro/git/) sempre que precisar!\n\n### Durante o desenvolvimento\n\n ⚠ **PULL REQUESTS COM ISSUES NO ESLINT NÃO SERÃO AVALIADOS, ATENTE-SE PARA RESOLVÊ-LOS ANTES DE FINALIZAR O DESENVOLVIMENTO!** ⚠\n\n* Nos testes unitários que não estão implementados, vocês verão 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 o `assert.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.\n\n* Faça `commits` das alterações que você fizer no código regularmente\n\n* Lembre-se de sempre após um (ou alguns) `commits` atualizar o repositório remoto\n\n* Os comandos que você utilizará com mais frequência são:\n  1. `git status` _(para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)_\n  2. `git add` _(para adicionar arquivos ao stage do Git)_\n  3. `git commit` _(para criar um commit com os arquivos que estão no stage do Git)_\n  4. `git push -u nome-da-branch` _(para enviar o commit para o repositório remoto na primeira vez que fizer o `push` de uma nova branch)_\n  5. `git push` _(para enviar o commit para o repositório remoto após o passo anterior)_\n  6. `npm test` _(executa todos os testes presentes na aplicação)_\n  7. `npm test path/to/file` _(executa apenas os testes presentes no arquivo path/to/file)_\n    * exemplo: `npm test tests/average.spec.js`\n  8. `jest path/to/file` _(executa apenas os testes presentes no arquivo path/to/file)_\n    * exemplo: `jest tests/average.spec.js`\n\n### ESLint\n\nSeu projeto só será avaliado se estiver passando pelos _checks_ do **ESLint**.\n\n---\n\n### Lista de requisitos\n\n### 1 - Implemente a função `average`\n\nA 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.  \n\n### 2 - Implemente os casos de teste para a função `numbers`\n\n 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.\n\n### 3 - Implemente a função `vqv`\n\nUse template literals para escrever uma função que recebe seu nome e sua idade e retorna o parágrafo descrito abaixo:\n\n```javascript\n`'Oi, meu nome é Tunico!\nTenho 30 anos,\ntrabalho na Trybe e mando muito em programação!\n#VQV!'`\n```\n\nCaso 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.\n\n### 4 - Implemente os casos de teste para a função `circle`\n\nA 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.\n\n### 5 - Implemente a função `createStudent`\n\nA função `createStudent` recebe como parâmetro um nome, e retorna um objeto contendo duas chaves:\n    (1) name, contendo o nome passado como parâmetro;\n    (2) feedback, contendo uma função que retorna a frase 'Eita pessoa boa!' ao ser chamada.\nO 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.\n\n### 6 - Implemente os casos de teste para a função `productDetails`\n\nA função `productDetails` recebe duas strings que representam nomes de produtos, e retorna um array contendo dois objetos com os detalhes dos respectivos produtos:\n\n```javascript\nproductDetails('Alcool gel', 'Máscara') // Retorna:\n  [\n    {\n      name: 'Alcool gel'\n      details: {\n        productId: 'Alcool gel123'\n      }\n    },\n    {\n      name: 'Máscara'\n      details: {\n        productId: 'Máscara123'\n      }\n    }\n  ]\n```\n\nEssa 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.\n\n### 7 - Implemente a função `objCalculator`\nDesenvolva um objeto calculator que possui quatro chaves:\n  - add;\n  - mult;\n  - div;\n  - sub.\n\nPara 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.\n\n### 8 - Implemente a função `myCounter`\nA 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. \n\n### 9 - Implemente os casos de teste e a função `createMenu`\n\n**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!**\n\nVocê é 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:\n  - ler o menu cadastrado;\n  - fazer pedidos;\n  - verificar o que foi pedido;\n  - somar o valor da conta.\n\nA 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.\n\n  1. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica se a função `createMenu()`, retorna um objeto que possui, mas não é necessariamente é limitado à chave `fetchMenu`, a qual tem como valor uma função.\n  2. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica se, dado que a função `createMenu` foi chamada com o objeto: `{ food: {}, drink: {} }`, checa se `'objetoRetornado.fetchMenu()'` retorna um objeto cujas chaves são somente `food` e `drink`.\n  3. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica se o menu passado pra função `createMenu` é identico ao menu recuperado pela função `'objetoRetornado.fetchMenu()'`.\n  4. No arquivo `src/restaurant.js`, crie uma função `createMenu()` que, dado um objeto passado por parâmetro, retorna um objeto com o seguinte formato: `{ fetchMenu: () =\u003e objetoPassadoPorParametro }`.\n  5. 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.\n  6. No arquivo `src/restaurant.js`, adicione ao objeto retornado por `createMenu` uma chave `consumption` que, como valor inicial, tem um array vazio.\n  7. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica se ao chamar uma função associada à chave `order` no objeto retornado, passando uma string como parâmetro, como `objetoRetornado.order('coxinha')`, tal string é adicionada ao array retornado em `objetoRetornado.consumption`\n  8. No arquivo `src/restaurant.js`, crie uma função, separada da função `createMenu()`, que, dada uma string recebida por parâmetro, adiciona essa string ao array de `objetoRetornado.consumption`. Adicione essa função à chave `order`.\n  9. 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 array `objetoRetornado.consumption` conforme os itens pedidos.\n  10. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica se a função `order` aceita que pedidos repetidos sejam acrescidos a consumption.\n  11. No arquivo `tests/restaurant.spec.js`, escreva um teste que verifica que, ao chamar `objetoRetornado.pay()`, retorna-se a soma dos preços de tudo que foi pedido, conforme registrado em `objetoRetornado.consumption`.\n  12. No arquivo `src/restaurant.js`, adicione ao objeto retornado por `createMenu()` uma chave `pay` com uma função que varre todo os itens de `objetoRetornado.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 chave `food` quanto o objeto da chave `drink`.\n\n---\n\n### Depois de terminar o desenvolvimento (OPCIONAL)\n\nPara **\"entregar\"** seu projeto, siga os passos a seguir:\n\n* Vá até a página **DO SEU** _Pull Request_, adicione a label de _\"code-review\"_ e marque seus colegas\n  * No menu à direita, clique no _link_ **\"Labels\"** e escolha a _label_ **code-review**\n  * No menu à direita, clique no _link_ **\"Assignees\"** e escolha **o seu usuário**\n  * No menu à direita, clique no _link_ **\"Reviewers\"** e digite `students`, selecione o time `tryber/students-sd-010-a`\n\nSe ainda houver alguma dúvida sobre como entregar seu projeto, [aqui tem um video explicativo](https://vimeo.com/362189205).\n\n---\n\n### Revisando um Pull Request\n\nÀ medida que você e as outras pessoas que estudam na Trybe forem entregando os projetos, vocês receberão um alerta via Slack para também fazer a revisão dos Pull Requests dos seus colegas. Fiquem atentos às mensagens do \"Pull Reminders\" no Slack!\n\nUse o material que você já viu sobre [Code Review](https://course.betrybe.com/real-life-engineer/code-review/) para te ajudar a revisar os projetos que chegaram para você.\n\nUse o conteúdo sobre [Code Review](https://course.betrybe.com/real-life-engineer/code-review/) para te ajudar a revisar os _Pull Requests_.\n\n---\n## Avisos finais\n\nAo finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!\n\nLink: [FORMULÁRIO DE AVALIAÇÃO DE PROJETO](https://bit.ly/3ta7hA0)\n\nO avaliador automático não necessariamente avalia seu projeto na ordem em que os requisitos aparecem no readme. Isso acontece para deixar o processo de avaliação mais rápido. Então, não se assuste se isso acontecer, ok?\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmuffato%2Fproject-js-unit-tests-trybe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flmuffato%2Fproject-js-unit-tests-trybe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flmuffato%2Fproject-js-unit-tests-trybe/lists"}