Skip to main content
Version: 2.0.0

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) for Windows Windows.
  • Install Colima( brew install colima && colima start ) for MacOS MacOs.

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 Linux or Windows 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:

    Test Case Generator

    Moving on...

    Run App with Docker Container 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 the docker-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 and mocks.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:

    Sample Keploy Test Result Gin MongoDB

    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 in test-x.yaml.

    Sample Keploy Test Result Node MongoDB

    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, from mongodb://mongoDb:27017/keploy to mongodb://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 and mocks.yml.

    Sample Keploy Test Result Node MongoDB

    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 in test-x.yaml.

    Sample Keploy Test Result Node MongoDB

    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 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 the docker-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 and mocks.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:

    Sample Keploy Test Result Gin MongoDB

    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 in test-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! โœจ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ปโœจ