How to send query string parameters using supertest?

J K picture J K · Oct 28, 2016 · Viewed 27.3k times · Source

I'm using supertest to send get query string parameters, how can I do that?

I tried

var imsServer = supertest.agent("https://example.com");

imsServer.get("/")
  .send({
    username: username,
    password: password,
    client_id: 'Test1',
    scope: 'openid,TestID',
    response_type: 'token',
    redirect_uri: 'https://example.com/test.jsp'
  })
  .expect(200) 
  .end(function (err, res) {
    // HTTP status should be 200
    expect(res.status).to.be.equal(200);
    body = res.body;
    userId = body.userId;
    accessToken = body.access_token;
    done();
  });

but that didn't send the parameters username, password, client_id as query string to the endpoint. Is there a way to send query string parameters using supertest?

Answer

Robert T. picture Robert T. · Nov 1, 2016

Although supertest is not that well documented, you can have a look into the tests/supertest.js.

There you have a test suite only for the query strings.

Something like:

request(app)
  .get('/')
  .query({ val: 'Test1' })
  .expect(200, function(err, res) {
    res.text.should.be.equal('Test1');
    done();
  });

Therefore:

.query({
  key1: value1,
  ...
  keyN: valueN
})

should work.