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) {
// ...
});
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);
});
});
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 () {
// ...
})
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.
$ npm install q-supertest
q-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");