q-supertest v1.1.0
q-supertest
q-supertest supercharges SuperTest with a then method, that returns Q promise.
Instead of layering callbacks on callbacks in your tests:
request(app)
.get("/user")
.expect(200, function (err, res) {
if (err) return done(err);
var userId = res.body.id;
request(app)
.post("/kittens")
.send({ userId: userId, ... })
.expect(201, function (err, res) {
if (err) return done(err);
// ...
});
});chain your requests like you were promised:
return request(app)
.get("/user")
.expect(200)
.then(function (res) {
return request(app)
.post("/kittens")
.send({ userId: res})
.expect(201);
})
.then(function (res) {
// ...
});Usage
q-supertest operates just like normal SuperTest, except that the
object returned by .get, .post, etc. is a proper
thenable:
var express = require("express")
, request = require("q-supertest");
var app = express();
request(app)
.get("/kittens")
.expect(200)
.then(function (res) {
// ...
});If you use a promise-friendly test runner, you can just
return your request chain from the test case rather than messing with a
callback:
describe("GET /kittens", function () {
it("should work", function () {
return request(app).get("/kittens").expect(200);
});
});Agents
If you use a SuperTest agent to persist cookies, those are thenable too:
var agent = require("q-supertest").agent(app);
agent
.get("/ugly-kitteh")
.expect(404)
.then(function () {
// ...
})Promisey goodness
To start, only the then method is exposed. But once you've called .then
once, you've got a proper Q promise that supports the whole gamut of
promisey goodness:
request(app)
.get("/kittens")
.expect(201)
.then(function (res) { /* ... */ })
// I'm a real promise now!
.catch(function (err) { /* ... */ })See the Q API for everything that's available.
Installation
Node
$ npm install q-supertestq-supertest lists supertest as a
peer dependency, so it'll wrap whatever version of SuperTest
you've asked for in your own package.json. If you don't specify a version of
SuperTest, npm will use the latest.
Do note that q-supertest is a well-behaved citizen and doesn't monkey-patch
SuperTest directly:
// I return thenables!
var request = require("q-supertest");
// I'm lame and force you to use callbacks
var request = require("supertest");