https://github.com/harttle/echo.js
A server echos raw http request text, for unit test usage
https://github.com/harttle/echo.js
echo http-text server-side-swift
Last synced: about 1 year ago
JSON representation
A server echos raw http request text, for unit test usage
- Host: GitHub
- URL: https://github.com/harttle/echo.js
- Owner: harttle
- License: mit
- Created: 2017-05-08T02:48:43.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-02-12T14:19:59.000Z (over 8 years ago)
- Last Synced: 2025-03-12T15:04:55.462Z (over 1 year ago)
- Topics: echo, http-text, server-side-swift
- Language: JavaScript
- Homepage:
- Size: 20.5 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# echo.js
Echo raw http request, for test usage.
## Example of using echo.js to test HTTP client
Assuming we have the following HTTP client:
```js
const superagent = require('superagent');
function getPizzas() {
return superagent.get('http://localhost:8061/api/v1/pizzas');
}
function postPizza() {
return superagent
.post('http://localhost:8061/api/v1/pizzas')
.send({ name: 'margherita' })
.set('X-API-Key', 'foobar');
}
module.exports = {
getPizzas,
postPizza,
};
```
We can write something like the following to test how we expect this client's requests to look like:
```js
const assert = require('chai').assert;
const client = require('./client');
const { createServer } = require('echo.js');
const server = createServer();
const port = 8061;
server.listen(port, function() {
/*
GET /api/v1/pizzas HTTP/1.1
Host: localhost:8061
Accept-Encoding: gzip, deflate
User-Agent: node-superagent/3.8.2
Connection: close
*/
const getPizzasPromise = client.getPizzas().then(res => {
// add assertions, e.g.
const lines = res.text.split('\n');
assert.equal(lines[0], 'GET /api/v1/pizzas HTTP/1.1');
});
/*
POST /api/v1/pizzas HTTP/1.1
Host: localhost:8061
Accept-Encoding: gzip, deflate
User-Agent: node-superagent/3.8.2
Content-Type: application/json
X-API-Key: foobar
Content-Length: 21
Connection: close
{"name":"margherita"}
*/
const postPizzasPromise = client.postPizza().then(res => {
// add assertions, e.g.
assert.equal(
res.text,
[
'POST /api/v1/pizzas HTTP/1.1',
'Host: localhost:8061',
'Accept-Encoding: gzip, deflate',
'User-Agent: node-superagent/3.8.2',
'Content-Type: application/json',
'X-API-Key: foobar',
'Content-Length: 21',
'Connection: close',
'',
'{"name":"margherita"}',
].join('\n'),
);
});
Promise.all([getPizzasPromise, postPizzasPromise])
.then(() => {
console.log('All tests pass');
})
.catch(err => {
console.error(err.message);
})
.then(() => {
server.close();
});
});
```
The same example can be found in this repo's `test` directory.