Skip to content
Super-agent driven library for testing node.js HTTP servers using a fluent API
JavaScript Makefile
Find file
New pull request
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


HTTP assertions made easy via super-agent.


The motivation with this module is to provide a high-level abstraction for testing HTTP, while still allowing you to drop down to the lower-level API provided by super-agent.


You may pass an http.Server, or a Function to request() - if the server is not already listening for connections then it is bound to an ephemeral port for you so there is no need to keep track of ports.

SuperTest works with any test framework, here is an example without using any test framework at all:

var request = require('./')
  , express = require('express');

var app = express();

app.get('/user', function(req, res){
  res.send(201, { name: 'tobi' });

  .expect('Content-Type', /json/)
  .expect('Content-Length', '20')
  .end(function(err, res){
    if (err) throw err;

Here's an example with mocha, note how you can pass done straight to any of the .expect() calls:

describe('GET /users', function(){
  it('respond with json', function(done){
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      .expect(200, done);


You may use any super-agent methods, including .write(), .pipe() etc and perform assertions in the .end() callback for lower-level needs.

.expect(status[, fn])

Assert response status code.

.expect(body[, fn])

Assert response body text with a string, regular expression, or parsed body object.

.expect(field, value[, fn])

Assert header field value with a string or regular expression.


Perform the request and invoke fn(err, res).

Something went wrong with that request. Please try again.