NodeJS Sample Application
Introduction
A simple sample CRUD application and see how seamlessly Keploy integrates with Express and MongoDB. Buckle up, it's gonna be a fun ride! ๐ข
Pre-Requisite ๐ ๏ธ
- Install WSL (
wsl --install
) forWindows.
- Install Colima(
brew install colima && colima start
) forMacOs.
Get Started! ๐ฌ
Setup application
Clone the repository and move to express-mongoose folder
git clone https://github.com/keploy/samples-typescript && cd samples-typescript/express-mongoose
# Install the dependencies
npm install
Installation ๐ฅ
Depending on your OS, choose your adventure:
Linux or
Windows
Alright, let's equip ourselves with the latest Keploy binary:
curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
If everything goes right, your screen should look a bit like this:
Moving on...
Run App with
Docker
Add alias for Keploy:
alias keploy='sudo docker run --pull always --name keploy-v2 -p 16789:16789 --privileged --pid=host -it -v "$(pwd)":/files -v /sys/fs/cgroup:/sys/fs/cgroup -v /sys/kernel/debug:/sys/kernel/debug -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/keploy/keploy'
Lights, Camera, Record! ๐ฅ
Fire up the application and mongoDB instance with Keploy. Keep an eye on the two key flags:
-c
: Command to run the app (e.g.,docker compose up
).--containerName
: The container name in thedocker-compose.yml
for traffic interception.keploy record -c "docker compose up" --containerName "nodeMongoApp"
๐ฅ Challenge time! Generate some test cases. How? Just make some API calls. Postman, Hoppscotch or even curl - take your pick!
Let's generate the testcases.
Make API Calls using Hoppscotch, Postman or cURL command. Keploy with capture those calls to generate the test-suites containing testcases and data mocks.
curl --request POST \ --url http://localhost:8000/students \ --header 'content-type: application/json' \ --data '{ "name":"John Do", "email":"john@xyiz.com", "phone":"0123456799" }' ``` Here's a peek of what you get: ``` Student registration successful!
๐ Woohoo! With a simple API call, you've crafted a test case with a mock! Dive into the Keploy directory and feast your eyes on the newly minted
test-1.yml
andmocks.yml
Time to perform more API magic! Follow the breadcrumbs... or Make more API Calls
curl --request GET \ --url http://localhost:8080/students
Or simply wander over to your browser and visit
http://localhost:8000/students
. Did you spot the new test and mock scrolls in your project library? Awesome! ๐Run Tests
Time to put things to the test ๐งช
keploy test -c "docker compose up" --containerName "nodeMongoApp" --delay 10
The
--delay
flag? Oh, that's just giving your app a little breather (in seconds) before the test cases come knocking.Your results should be looking all snazzy, like this:
Our testcases failed as the Keep-Alive connection won't be available when we are using testmode, this happen because in test mode the Keploy uses the
Mocks.yml
, which was generated in the record mode. ๐ฐ๏ธWorry not, just add the ever-changing fields (like our ts here) to the noise parameter to dodge those assertions.
noise: | - header.Date | - header.Keep-Alive | - header.Connection
Pro tip: Add
header.Connection
&header.Keep-Alive
to noise intest-x.yaml
.Wrapping it up ๐
Congrats on the journey so far! You've seen Keploy's power, flexed your coding muscles, and had a bit of fun too! Now, go out there and keep exploring, innovating, and creating! Remember, with the right tools and a sprinkle of fun, anything's possible.๐๐
Happy coding! โจ๐ฉโ๐ป๐จโ๐ปโจ
Run App on ๐ง Linux
We'll be running our sample application right on Linux, but just to make things a tad more thrilling, we'll have the database (mongoDB) chill on Docker. Ready? Let's get the party started!๐
First things first, update the MongoDB URL on line 4, in
db/connection.js
, frommongodb://mongoDb:27017/keploy
tomongodb://127.0.0.1:27017/keploy
.๐ Kickstart MongoDB
Let's breathe life into your mongo container. A simple spell should do the trick:
docker compose up mongo
๐ผ Roll the Tape - Recording Time!
Ready, set, record! Here's how:
sudo -E env PATH=$PATH keploy record -c 'node src/app.js'
Keep an eye out for the
-c
flag! It's the command charm to run the app.Alright, magician! With the app alive and kicking, let's weave some test cases. The spell? Making some API calls! Postman, Hoppscotch, or the classic curl - pick your wand.
Let's generate the testcases.
Make API Calls using Hoppscotch, Postman or cURL command. Keploy with capture those calls to generate the test-suites containing testcases and data mocks.
curl --request POST \ --url http://localhost:8000/students \ --header 'content-type: application/json' \ --data '{ "name":"John Do", "email":"john@xyiz.com", "phone":"0123456799" }'
Here's a peek of what you get:
Student registration successful!
๐ Woohoo! Give yourself a pat on the back! With that simple spell, you've conjured up a test case with a mock! Explore the Keploy directory and you'll discover your handiwork in
test-1.yml
andmocks.yml
.Now, the real fun begins. Let's weave more spells!
๐ Follow the URL road...!
curl --request GET \ --url http://localhost:8080/students
Or simply wander over to your browser and visit
http://localhost:8000/students
.Did you spot the new test and mock scrolls in your project library? Awesome! ๐
Run Tests ๐
Ready to put your spells to the test?
sudo -E env PATH=$PATH keploy test -c "node src/app.js" --delay 10
Worry not, just add the ever-changing fields (like our ts here) to the noise parameter to dodge those assertions.
noise: | - header.Date | - header.Keep-Alive | - header.Connection
Pro tip: Add
header.Connection
&header.Keep-Alive
to noise intest-x.yaml
.Wrapping it up ๐
Congrats on the journey so far! You've seen Keploy's power, flexed your coding muscles, and had a bit of fun too! Now, go out there and keep exploring, innovating, and creating! Remember, with the right tools and a sprinkle of fun, anything's possible.๐๐
Happy coding! โจ๐ฉโ๐ป๐จโ๐ปโจ
MacOs
Dive straight in, but first, give Colima a gentle nudge with (
colima start
). Let's make sure it's awake and ready for action!Add alias for Keploy ๐ฐ:
For the sake of convenience (and a bit of Mac magic ๐ช), let's set up a shortcut for Keploy:
alias keploy='sudo docker run --pull always --name keploy-v2 -p 16789:16789 --privileged --pid=host -it -v "$(pwd)":/files -v /sys/fs/cgroup:/sys/fs/cgroup -v /sys/kernel/debug:/sys/kernel/debug -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/keploy/keploy'
Lights, Camera, Record! ๐ฅ
Fire up the application and mongoDB instance with Keploy. Keep an eye on the two key flags:
-c
: Command to run the app (e.g.,docker compose up
).--containerName
: The container name in thedocker-compose.yml
for traffic interception.keploy record -c "docker compose up" --containerName "nodeMongoApp"
๐ฅ Challenge time! Generate some test cases. How? Just make some API calls. Postman, Hoppscotch or even curl - take your pick!
Let's generate the testcases.
Make API Calls using Hoppscotch, Postman or cURL command. Keploy with capture those calls to generate the test-suites containing testcases and data mocks.
curl --request POST \ --url http://localhost:8000/students \ --header 'content-type: application/json' \ --data '{ "name":"John Do", "email":"john@xyiz.com", "phone":"0123456799" }'
Here's a peek of what you get:
Student registration successful!
๐ Woohoo! With a simple API call, you've crafted a test case with a mock! Dive into the Keploy directory and feast your eyes on the newly minted
test-1.yml
andmocks.yml
Time to perform more API magic! Follow the breadcrumbs... or Make more API Calls
curl --request GET \ --url http://localhost:8080/students
Or simply wander over to your browser and visit
http://localhost:8000/students
.Did you spot the new test and mock scrolls in your project library? Awesome! ๐
Run Tests
Time to put things to the test ๐งช
keploy test -c "docker compose up" --containerName "nodeMongoApp" --delay 10
The
--delay
flag? Oh, that's just giving your app a little breather (in seconds) before the test cases come knocking.Your results should be looking all snazzy, like this:
Our testcases failed as the Keep-Alive connection won't be available when we are using testmode, this happen because in test mode the Keploy uses the
Mocks.yml
, which was generated in the record mode. ๐ฐ๏ธWorry not, just add the ever-changing fields (like our ts here) to the noise parameter to dodge those assertions.
noise: | - header.Date | - header.Keep-Alive | - header.Connection
Pro tip: Add
header.Connection
&header.Keep-Alive
to noise intest-x.yaml
.Wrapping it up ๐
Congrats on the journey so far! You've seen Keploy's power, flexed your coding muscles, and had a bit of fun too! Now, go out there and keep exploring, innovating, and creating! Remember, with the right tools and a sprinkle of fun, anything's possible.๐๐
Happy coding! โจ๐ฉโ๐ป๐จโ๐ปโจ