Skip to content Skip to sidebar Skip to footer

Seem To Have The Wrong Content Type When Posting With Chai-http

I am looking to make use of Chai-HTTP for some testing. Naturally I want to test more than my GETs however I seem to be hitting a major roadblock when attempting to make POSTs. In

Solution 1:

Having discussed this further on Chai-HTTP's Git-Hub page, I was able to find out that this is expected behaviour of SuperAgent, the HTTP request library under the hood of Chai-HTTP, which auto-detects the content-type based on what kind of data is contained in the .send() call.

I stumbled across this particular question as well which helped clarify what the difference between content-types actually was.

If anyone else runs into this problem, I've learned that Chai-HTTP's POST requests can be altered quite easily (kudos to meeber's help here) using calls like this:

//Override auto-detection by specifying the header explicitly
.set('content-type', 'application/x-www-form-urlencoded')

//Select the type 'form'
.type('form')

//Pass multiple strings in send instead of using an object
.send('grant_type=password')
.send('username=hello@world.com')
.send('password=password')

Creating a request that looks like this:

describe('/post.php', function() {

  var endPointUnderTest = '/post.php';

  it('should return an auth token', function(done) {
    chai.request('http://posttestserver.com')
      .post(endPointUnderTest)
      .set('Token', 'text/plain')
      .set('content-type', 'application/x-www-form-urlencoded')
      .type('form')
      .send('grant_type=password')
      .send('username=hello@world.com')
      .send('password=password')
      .end(function(err, res) {
        console.log(res);
        res.should.have.status(200);
        done();
      });
  });
});

Post a Comment for "Seem To Have The Wrong Content Type When Posting With Chai-http"