-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added docs for samples-express-mongoose.md (#401)
* updated docs Signed-off-by: s2ahil <sahilpradhan411@gmail.com> * Update samples-express-mongoose.md Signed-off-by: s2ahil <sahilpradhan411@gmail.com> --------- Signed-off-by: s2ahil <sahilpradhan411@gmail.com> Co-authored-by: Sarthak Negi <122533767+sarthaksarthak9@users.noreply.github.com> Co-authored-by: Animesh Pathak <kurosakiichigo.songoku@gmail.com> Co-authored-by: Neha Gupta <gneha21@yahoo.in>
- Loading branch information
1 parent
5a7f55c
commit 7677df2
Showing
2 changed files
with
281 additions
and
1 deletion.
There are no files selected for viewing
279 changes: 279 additions & 0 deletions
279
versioned_docs/version-2.0.0/quickstart/samples-express-mongoose.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,279 @@ | ||
--- | ||
id: express-mongoose-application | ||
title: sample course selling api (express) | ||
sidebar_label: NodeJS - Express + Mongoose | ||
description: The following sample app showcases how to use NodeJS framework and the Keploy Platform. | ||
tags: | ||
- javascript | ||
- quickstart | ||
- samples | ||
- examples | ||
- tutorial | ||
keyword: | ||
- NodeJS Framework | ||
- MongoDB | ||
- NodeJS | ||
- API Test generator | ||
- Auto Testcase generation | ||
--- | ||
|
||
## Introduction | ||
|
||
A simple sample CRUD application and see how seamlessly Keploy integrates with [Express](https://expressjs.com/) and [MongoDB](https://www.mongodb.com/). Buckle up, it's gonna be a fun ride! π’ | ||
|
||
import InstallationGuide from '../concepts/installation.md' | ||
|
||
<InstallationGuide/> | ||
|
||
## Get Started! π¬ | ||
|
||
Clone the repository and move to express-mongoose folder | ||
|
||
```bash | ||
git clone https://github.com/keploy/samples-typescript && cd samples-typescript/node-mongoose | ||
|
||
# Install the dependencies | ||
npm install | ||
``` | ||
|
||
### Lights, Camera, Record! π₯ | ||
|
||
### Docker installation and running the mongodb compass | ||
|
||
## Here I'm using WSL , so follow below steps to configure docker with mongo db compass | ||
|
||
**1. Install docker in your windows and follow this tutorial to connect with mongodb compass :** | ||
|
||
```bash | ||
https://www.youtube.com/watch?v=NEPZqSvKx40&list=PLff_PESolMjuDXQdjiqYRW_GnDQjU32QX | ||
``` | ||
|
||
**2. after installing docker and running those commands in video use this command as well to create a network:** | ||
|
||
```bash | ||
docker network create keploy-network | ||
``` | ||
|
||
> \*_url should look something like this depending on your connection you can adjust, also update your .env file with mongodb_url:`mongodb://127.0.0.1:27023/courses`._ | ||
#### Capturing Testcases | ||
|
||
```bash | ||
keploy record -c "npm start" | ||
``` | ||
|
||
if using wsl use this : | ||
|
||
```bash | ||
sudo -E env PATH=$PATH keploy record -c 'npm start' | ||
``` | ||
|
||
π₯ 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](https://hoppscotch.io), [Postman](https://postman.com) or cURL command. Keploy with capture those calls to generate the test-suites containing testcases and data mocks. | ||
|
||
π 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` after doing below steps | ||
|
||
_Time to perform API magic!_ | ||
Follow the breadcrumbs... or Make more API Calls | ||
|
||
Some api calls you can make | ||
|
||
Get request - Get all courses | ||
|
||
```bash | ||
curl --request GET \ | ||
--url http://localhost:3000/courses | ||
``` | ||
|
||
Post request - Add a new course | ||
|
||
```bash | ||
curl --location 'http://localhost:3000/courses' \ | ||
--header 'Content-Type: application/x-www-form-urlencoded' \ | ||
--data-urlencode 'title=react advance' \ | ||
--data-urlencode 'description=advance' \ | ||
--data-urlencode 'price=1000' \ | ||
--data-urlencode 'published=true' | ||
``` | ||
|
||
Put request - Add a new course | ||
|
||
- Make sure to replace id of course | ||
|
||
```bash | ||
curl --location --request PUT 'http://localhost:3000/courses/6626a9cd3840cb305c0a6d52' \ | ||
--header 'Content-Type: application/x-www-form-urlencoded' \ | ||
--data-urlencode 'title=react advance' | ||
``` | ||
|
||
Delete request - Delete a course | ||
|
||
- Make sure to replace id of course | ||
|
||
```bash | ||
curl --location --request DELETE 'http://localhost:3000/courses/6626a9cd3840cb305c0a6d52' | ||
``` | ||
|
||
π Easy right! Just one API call and you've whipped up a test case with a mock. Check out the Keploy directory to find your shiny new `test-1.yml` and `mocks.yml` files. | ||
|
||
```yaml | ||
version: api.keploy.io/v1beta1 | ||
kind: Http | ||
name: test-1 | ||
spec: | ||
metadata: {} | ||
req: | ||
method: GET | ||
proto_major: 1 | ||
proto_minor: 1 | ||
url: http://localhost:3000/courses | ||
header: | ||
Accept: "*/*" | ||
Accept-Encoding: gzip, deflate, br | ||
Cache-Control: no-cache | ||
Connection: keep-alive | ||
Host: localhost:3000 | ||
Postman-Token: 61d4ef71-85a9-4dd9-b036-6beb0136c8d7 | ||
User-Agent: PostmanRuntime/7.32.1 | ||
body: "" | ||
timestamp: 2024-04-22T23:56:36.910408265+05:30 | ||
resp: | ||
status_code: 200 | ||
header: | ||
Access-Control-Allow-Origin: "*" | ||
Connection: keep-alive | ||
Content-Length: "740" | ||
Content-Type: application/json; charset=utf-8 | ||
Date: Mon, 22 Apr 2024 18:26:36 GMT | ||
Etag: W/"2e4-bpK0GltUbFpXKUMEiWddtMBI/a4" | ||
Keep-Alive: timeout=5 | ||
X-Powered-By: Express | ||
body: '{"courses":[{"_id":"66269dd4a16b2f11f9c1c0e9","title":"python course","description":"advance","price":1000,"published":true,"__v":0},{"_id":"66269e13a16b2f11f9c1c0ec","title":"react course","description":"advance","price":1000,"published":true,"__v":0},{"_id":"66269f2034c9140719a0f7de","title":"express","description":"advance","price":1000,"published":true,"__v":0},{"_id":"6626a8f2946288ed91737eb7","title":"express and react","description":"advance","price":1000,"published":true,"__v":0},{"_id":"6626a9cd3840cb305c0a6d52","title":"react and next js","description":"advance","price":1000,"published":true,"__v":0},{"_id":"6626aa43f9602455c7dac9ea","title":"react advance","description":"advance","price":1000,"published":true,"__v":0}]}' | ||
status_message: OK | ||
proto_major: 0 | ||
proto_minor: 0 | ||
timestamp: 2024-04-22T23:56:38.951925148+05:30 | ||
objects: [] | ||
assertions: | ||
noise: | ||
header.Date: [] | ||
created: 1713810398 | ||
curl: | | ||
curl --request GET \ | ||
--url http://localhost:3000/courses \ | ||
--header 'Connection: keep-alive' \ | ||
--header 'User-Agent: PostmanRuntime/7.32.1' \ | ||
--header 'Accept: */*' \ | ||
--header 'Cache-Control: no-cache' \ | ||
--header 'Postman-Token: 61d4ef71-85a9-4dd9-b036-6beb0136c8d7' \ | ||
--header 'Host: localhost:3000' \ | ||
--header 'Accept-Encoding: gzip, deflate, br' \ | ||
``` | ||
Or simply wander over to your browser and visit `http://localhost:3000/courses`. | ||
|
||
Did you spot the new test and mock scrolls in your project library? Awesome! π | ||
|
||
### Run Tests | ||
|
||
Time to put things to the test π§ͺ | ||
|
||
```bash | ||
keploy test -c "npm start" --delay 10 | ||
``` | ||
|
||
If using wsl use this : | ||
|
||
```bash | ||
keploy -E env PATH=$PATH keploy test -c 'npm start' --delay 10 | ||
``` | ||
|
||
Keploy test report: | ||
![image](https://github.com/s2ahil/samples-typescript/assets/101473078/48f2b866-04d1-433b-9270-34c15786893c) | ||
|
||
> The `--delay` flag? Oh, that's just giving your app a little breather (in seconds) before the test cases come knocking. | ||
|
||
### To Run test using jest use this command : | ||
|
||
```bash | ||
npm test | ||
``` | ||
|
||
jest test coverage report : | ||
|
||
![Screenshot 2024-04-22 025850](https://github.com/s2ahil/samples-typescript/assets/101473078/f60570d0-b998-4b4a-912d-80d4c73604e3) | ||
|
||
## Get Keploy jest sdk | ||
|
||
```bash | ||
npm i @keploy/sdk nyc jest | ||
``` | ||
|
||
## Update package file | ||
|
||
Update the `package.json` file that runs the application: | ||
|
||
```json | ||
"scripts": { | ||
//other scripts | ||
"test": "jest --coverage --collectCoverageFrom='src/**/*.{js,jsx}'", | ||
"coverage": "nyc npm test && npm run coverage:merge && npm run coverage:report", | ||
"coverage:merge": "mkdir -p ./coverage && nyc merge ./coverage .nyc_output/out.json", | ||
"coverage:report": "nyc report --reporter=lcov --reporter=text" | ||
//other scripts | ||
} | ||
``` | ||
|
||
## Usage | ||
|
||
For the code coverage for the keploy API tests using the jest integration, you need to add the following test to your Jest test file. It can be called as `keploy.test.js`. Jest test file. It can be called as `keploy.test.js`. | ||
|
||
```javascript | ||
const {expect} = require("@jest/globals"); | ||
const keploy = require("@keploy/sdk"); | ||
const timeOut = 300000; | ||
describe( | ||
"Keploy Server Tests", | ||
() => { | ||
test( | ||
"TestKeploy", | ||
(done) => { | ||
const cmd = "npm start"; | ||
const options = {}; | ||
keploy.Test(cmd, options, (err, res) => { | ||
if (err) { | ||
done(err); | ||
} else { | ||
expect(res).toBeTruthy(); // Assert the test result | ||
done(); | ||
} | ||
}); | ||
}, | ||
timeOut | ||
); | ||
}, | ||
timeOut | ||
); | ||
``` | ||
|
||
Now let's run jest tests along keploy using command | ||
|
||
```bash | ||
npm test | ||
``` | ||
|
||
To get Combined coverage with keploy test coverage | ||
|
||
```bash | ||
npm run coverage | ||
``` | ||
|
||
### 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! β¨π©βπ»π¨βπ»β¨ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters