node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



NPM version NPM downloads Build status Test coverage

Request driven library for testing node.js HTTP servers via request.

Note: This library is not heavily maintained. If you're looking for a functional request library with hte ability to mount servers during tests, consider trying Popsicle with the server plugin.


npm install retest --save-dev


You may pass a http.Server, function or string to retest() - if the server is not listening for connections it will be bound to an ephemeral port so there is no need to keep track of ports.

var retest  = require('retest');
var express = require('express');
var app = express();
app.get('/', function (req, res) {
retest(app).get('/user', function (err, res) {
  if (err) throw err;

A retest instance accepts the same arguments as request, including the options object.

Multipart Requests

A multipart request can be sent using the form-data module. Just use retest.form() to create an instance and pass it as the body option, as you would any other object.

var retest = require('retest');
var test   = retest(app);
var form = test.form();
// Append fields and files as you normally would. 
form.append('username', 'blakeembrey');
form.append('password', 'hunter2');{
  uri: '/user',
  body: form
}, function (err, res) {
  // ... 


The callback function is called with two arguments, the error and response. The response body will be automatically parsed when possible based on the content type (current application/json and application/x-www-form-urlencoded).


Create an instance that will reuse cookies between requests by calling retest.agent(app).