Skip to content

harttle/echo.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

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:

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.

About

A server echos raw http request text, for unit test usage

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •