Spotify Radio - JS Expert Week 6.0
Welcome to the sixth Javascript Expert Week. This is the starting code to start our journey.
Tag this project with a star 🌟
Preview
Checklist Features
-
Web API
- [ ] Must achieve 100% code coverage in tests
- [ ] Must have end to end tests validating all API routes
- [ ] Must deliver static files as Node.js Streams
- [ ] Must deliver music files as a Node.js Stream
- [ ] Given a disconnected user it should not break the API
- [ ] Even if multiple commands are fired at the same time, it should not break the API
- [ ] If an unexpected error occurs, the API should keep working
- [ ] The project needs to run on Linux, Mac and Windows environments
-
Web App
- Client
- [ ] Must play the broadcast
- [ ] Shouldn’t pause if any effects are added
- Controller
- [ ] Must achieve 100% code coverage in tests
- [ ] Must be able to start or stop a broadcast
- [ ] Must send commands to add audio effects to a stream
Tasks per class
- Lesson 01: Cover service and route layers with unit tests and achieve 100% code coverage
- Lesson 02: Maintain 100% code coverage and implement e2e tests for the entire API
- Lesson 03: implement unit tests for the frontend and maintain 100% code coverage
- PLUS:
- [ ] provide a new effect
- [ ] add a new button on the controller
- [ ] add a new effect sound to the
audios/fx/
folder
- [ ] repost on heroku
Source code for classes and solving challenges
Credits to the sources I’ve used on the demos
Streaming
Effects
FAQ
-
NODE_OPTIONS
is not a system recognized command, what to do?
- If you are on Windows, the way to create environment variables is different. You must use the word
set
before the command.
- Ex:
"test": "set NODE_OPTIONS=--experimental-vm-modules && npx jest --runInBand",
-
I ran npm test
but nothing happens, what to do?
- Check your Node.js version. We are using version 17. Go to node.js website and download the latest version.
-
jest.spyOn
- when we try to use function.name
(something like stream.pipe.name
), it says the instance is undefined
- In this case, use the value as a string:
jest.spyOn(stream, "pipe").mockReturnValue
-
Challenge 01 impossible to complete 100% code coverage because testUtil.js is not being fully used
- Add the following code snippet to the first line of the testUtil.js file:
/* istanbul ignore file */
. This will make jest ignore this file and complete 100%.
- Important: this change will only serve to complete this first and/or second challenge, in the last class, we will not need to ignore this file since we will use all the functions