No módulo 03 - Conceitos fundamentais sobre o ciclo de vida do Javascript
vimos diferentes conceitos dentro do nosso querido Java Script, então escolhemos os mais relevantes e desenvolvemos um desafios onde possam ser ultilizados.
Este desafio consiste em uma API (como feita no desafio anterior) com duas rotas, cada rota devolve uma playlist.
-
Default
Deve retornar 404 ou uma mensagem dehello world
-
YoutubeMusic e SpotifyMusic
Devem derivar demusic.js
e cada uma deve conter um método de coerção de tipo (valueOf
/toString
e[Symbol.toPrimitive]
)
-
2.1
String
Deve retornar uma string contendoNome da música - Nome da banda - Nome do álbum
-
2.2
Number
Deve retornar o valor em milissegundos da duração da música
-
GET/youtube
Deve retornar a playlist da fake API Youtube -
GET/spotify
Deve retornar a playlist da fake API Spotify
-
Unitários
-
E2E
-
Prototype das classes derivadas de
music.js
-
Coersão de tipo devolvendo o esperado
-
TDD e BDD, será que rola? Acho que vale a tentativa!
-
Publicar o code coverage no github pages!
-
Consegue aplicar os conceitos de clonagem de Objeto?
A arquitetura nesse desafio é livre, fique a vontade para desenvolver como bem entender, a única restrição é ultilizar as classes Music
, YoutubeMusic
e SpotifyMusic
.
project
│ README.md
│ package.json
│
└───src
│ |
| |__util
| |
| |__api.js
| |__timeFormat.js
│
└───test
│ │
│ └───unit
| |
| |___e2e
-
Web API
-
Deve ter uma rota raiz que retorne 404 ou um hello world.
-
Deve ter uma rota de
/youtube
, onde:- Deve consumir a rota
/youtube
da fake APIs
- Deve consumir a rota
-
Deve ter uma rota de
/spotify
, onde:- Deve consumir a rota
/spotify
da fake APIs
- Deve consumir a rota
-
Deve retornar um objeto JSON com essa estrutura
{ musics:[ // Array de objetos { display: "Nome da música - Nome da banda - Nome do álbum", duration: 00:03:55:255 // Duração da música }, ... ], duration: 01:30:25:000 // Duração da playlist }
-
-
Youtube e Spotify Music
- Deve derivar de
Music
- Cada um deve ter um método de coerção de tipo
- Os métodos de coerção devem ser diferentes para cada classe
- Deve derivar de
-
Testes
- Deve ter testes unitários que cubra todas as funções
- Deve ter testes end-2-end que cubra todas as rotas
- Deve ter relatório de 100% de code coverage
- Deve testar o prototype das classes derivadas de
Music
- Deve testar a coersão de tipo das classes derivadas de
Music
-
package.json
- Troque a versão do node para a sua versão atual (node -v
) e coloque seu nome noAuthor
. -
npm run api
- Dar uma olhada no retorno da api e pensar na melhor estrategia para os dados retornados. -
npm i
- Escolha as bibliotecas de testes e instale elas (como as aulas do modulo 1 são com o CommonJS e as bibliotecaschai
,mocha
,sinon
enyc
, as configuralções de coverage já foi feita pensando nelas).
-
Inicialize um repósitório git com um arquivo README.md contendo seu nome, quais tópicos do checklist foram implementados e, caso queira, um breve resumo de cada tópico.
-
Crie o projeto e os testes.
-
Coloque as instruções de como configurar e executar seu projeto e os testes no README.md (não se esqueça do coverage com o
nyc
). -
Envie o link no canal
#desafios-jsexpert
da nossa comunidade no discord.