Search code examples
node.jsexpresssupertestsuperagent

How to chain http calls with superagent/supertest?


I am testing an express API with supertest.

I couldn't get multiple requests in a test case to work with supertest. Below is what i tried in a test case. But the test case seem to only execute the last call which is the HTTP GET.

it('should respond to GET with added items', function(done) {
    var agent = request(app);
    agent.post('/player').type('json').send({name:"Messi"});
    agent.post('/player').type('json').send({name:"Maradona"});
    agent.get('/player').set("Accept", "application/json")
        .expect(200)
        .end(function(err, res) {
            res.body.should.have.property('items').with.lengthOf(2);
            done();
    });
);

Anything i am missing here, or is there another way to chain http calls with superagent?


Solution

  • The calls are made asynchronous, so you need to use callback functions to chain them.

    it('should respond to GET with added items', function(done) {
        var agent = request(app);
        agent.post('/player').type('json').send({name:"Messi"}).end(function(){
            agent.post('/player').type('json').send({name:"Maradona"}).end(function(){
                agent.get('/player')
                    .set("Accept", "application/json")
                    .expect(200)
                    .end(function(err, res) {
                        res.body.should.have.property('items').with.lengthOf(2);
                        done();
                    });
            });
        });
    });