Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eddienubes/sagetest
๐งช Neat and streamlined library for testing of node.js HTTP servers.
https://github.com/eddienubes/sagetest
express expressjs fastify fetch http node node-fetch nodejs sagetest superagent supertest test testing undici
Last synced: 8 days ago
JSON representation
๐งช Neat and streamlined library for testing of node.js HTTP servers.
- Host: GitHub
- URL: https://github.com/eddienubes/sagetest
- Owner: eddienubes
- License: mit
- Created: 2024-02-03T19:20:10.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-08T05:42:20.000Z (10 months ago)
- Last Synced: 2024-04-08T08:35:05.579Z (10 months ago)
- Topics: express, expressjs, fastify, fetch, http, node, node-fetch, nodejs, sagetest, superagent, supertest, test, testing, undici
- Language: TypeScript
- Homepage: https://eddienubes.github.io/sagetest/
- Size: 12.7 MB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
Neat and streamlined testing library for node.js HTTP servers powered by undici.
It's currently in alpha. Everything could be a breaking change until the first major version.
Documentation | Getting Started
## ๐ Features
- Yes! This is a reference to my favourite Valorant character, Sage.
- **TypeScript friendly**, exposes both ESM and CJS modules.
- Built on top of [undici](https://github.com/nodejs/undici) for **maximum performance**.
- Provides **easy-to-use**, supertest-like API.
- Supports a **dedicated test server** to reduce the number of instances spawned during testing.
- Supports **Node.js v18.0 and above**.
- **No unnecessary** third-party dependencies.
- Automatically handles **cookie parsing**.## ๐ Getting Started
```sh
npm install -D sagetest
yarn add -D sagetest
pnpm add -D sagetest
```## ๐ฌ Sagetest in action
> There are several other methods which you can find in the [API documentation](https://eddienubes.github.io/sagetest/).
> In general, the usage experience should resemble that of supertest.#### Express Endpoint Testing
Example usage of **auth** method to set Basic Auth header based on username and password.
```ts
import { request } from '../src/index.js';// Just a plain express app
const response = await request(app).get('/').auth('user', 'pass');expect(response).toEqual({
body: {
message: 'I love my mom!',
requestHeaders: {
authorization: 'Basic dXNlcjpwYXNz',
connection: 'close',
host: expect.stringContaining('localhost')
}
},
cookies: {
'sweet-cookie': {
httpOnly: true,
path: '/',
value: 'choco'
}
},
error: false,
headers: {
connection: 'close',
'content-length': '130',
'content-type': 'application/json; charset=utf-8',
date: expect.any(String),
etag: expect.any(String),
'set-cookie': 'sweet-cookie=choco; Path=/; HttpOnly',
'x-powered-by': 'Express'
},
location: undefined,
ok: true,
redirect: false,
status: 200,
statusCode: 200,
statusText: 'OK',
text: expect.any(String) // Stringified body
});
```#### Fastify Endpoint Testing
Example usage of **auth** method to set the Authorization header based on the provided token.
Also, in response, you're able to validate cookies sent by the server.```ts
import { request } from '../src/index.js';// Don't forget to wait until all plugins are registered.
await fastifyApp.ready();// Don't forget to use .server instead of plain fastify instance.
const response = await request(fastifyApp.server).get('/').auth('jwtToken');expect(response).toEqual({
body: {
message: 'I love my mom!',
requestHeaders: {
authorization: 'Bearer jwtToken',
connection: 'close',
host: expect.any(String)
}
},
cookies: {
'sweet-cookie': {
httpOnly: true,
path: '/',
value: 'choco'
}
},
error: false,
headers: {
connection: 'close',
'content-length': '127',
'content-type': 'application/json; charset=utf-8',
date: expect.any(String),
'set-cookie': 'sweet-cookie=choco; HttpOnly'
},
location: undefined,
ok: true,
redirect: false,
status: 200,
statusCode: 200,
statusText: 'OK',
text: expect.any(String) // Stringified body
});
```## ๐ API Documentation
The API documentation is available [here](https://eddienubes.github.io/sagetest/).
If you need more examples or have some questions, just open an issue or submit a pull request.
I'll be happy to help you out.## โค๏ธ Contributing
If you wish to contribute to the evolution of this package,
please feel free to submit your issues or open pull requests.
You are always welcome.
๐ฅฐ## License
MIT (c) Eddie Nubes