Simply library for powerful and easy testing REST API
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
tests
.gitignore
.travis.yml
Gruntfile.js
LICENSE.md
README.md
package.json

README.md

HTTP Test NPM version Build Status Dependency Status

Simply library for powerful and easy testing REST API

Install:

$ npm install httptest --save-dev

Example:

var httptest = require('httptest');

httptest('https://api.github.com/repos/andreychizh/')
    .get('/node-httptest')
    .setParam('version', 123)
    .setHeader('User-Agent', 'Firefox');
    .expectStatus(200)
    .expectJSON()
    .end(function(err, res) {
        if (err) throw err;
        console.log(res);
    });

API:

Chaining

Every method will return a httptest object, so methods can be chained.

httptest(uri)

Create request or group of request object and specify the base uri.

httptest('http://localhost:3000/')

.post(uri)

Set POST method of request.

httptest('http://localhost:3000/')
    .post('/api/1.0/cars')

.get(uri)

Set GET method of request.

httptest('http://localhost:3000/')
    .get('/api/1.0/cars')

.head(uri)

Set HEAD method of request.

httptest('http://localhost:3000/')
    .head('/api/1.0/cars/123')

.put(uri)

Set PUT method of request.

httptest('http://localhost:3000/')
    .put('/api/1.0/cars/123')

.patch(uri)

Set PATCH method of request.

httptest('http://localhost:3000/')
    .patch('/api/1.0/cars/123')

.del(uri)

Set DELETE method of request.

httptest('http://localhost:3000/')
    .del('/api/1.0/cars/123')

.setParam(param[, value])

Set GET params of request.

// As object
httptest('http://localhost:3000/');
    .get('/api/1.0/cars')
    .setParam({sort: 'asc'})

// As key-value
httptest('http://localhost:3000/')
    .get('/api/1.0/cars')
    .setParam('sort', 'asc')

// Result
http://localhost:3000/api/1.0/cars?sort=asc

.setBody(body)

Set POST, PUT, PATCH request body

// As object
httptest('http://localhost:3000/')
    .post('/api/1.0/cars')
    .setBody({vendor: 'BMW', model: 'M5'})

.setHeader(header[, value])

Set headers of request.

// As object
httptest('http://localhost:3000/')
    .setHeader({'User-Agent': 'Firefox'})

// As key-value
httptest('http://localhost:3000/')
    .setHeader('User-Agent', 'Firefox')

.expectStatus(status)

Check status code of response.

httptest('http://localhost:3000/')
    .get('/api/1.0/cars')
    .expectStatus(200)

.expectJSON()

Checks the type of the response data. Method also parse JSON and return JavaScript object as res on .end(callback).

httptest('http://localhost:3000/')
    .get('/api/1.0/cars')
    .expectJSON()

.end(callback)

Perform request with given options. Invoke callback(err, res).

httptest('http://localhost:3000/')
    .get('/api/1.0/cars')
    .end(function(err, res) {
        if (err) throw err;
        console.log(res);
    );

Workflow

Possible to create a common options for a group of requests. Also support override of params, headers, body, expect.

var httptest = require('httptest');

// Common options
var http = httptest('http://localhost:3000/')
    .setHeader('User-Agent', 'Firefox')
    .setParam('token', 'secret_key')
    .setParam('userId', '111')
    .expectStatus(200)
    .expectJSON();

// Test 1
http.get('/api/cars')
    .setParam('limit', 10)
    .end(function(err, res) {
        if (err) throw err;
        console.log(res);
    });

// Test 2
http.get('/api/cars/123')
    .setParam('fields', 'vendor')
    .end(function(err, res) {
        if (err) throw err;
        console.log(res);
    });

// Test 3
http.get('/api/cars/456')
    .setParam('fields', 'model')
    .setParam('userId', '222')  // Override base options
    .end(function(err, res) {
        if (err) throw err;
        console.log(res);
    });

Package manager page

NPM

Direct link to the package

License

Released under the MIT license. Copyright (c) 2013-2014 Andrey Chizh.