node.jsmocha.jskarma-mocha

How to write a post request test in mocha with data to test if response matches?


Question: How do would I write a post request test in mocha that tests if the response matches?

The response will just be a url string as it is a redirect for a 3rd party service.

Working Example Payload:

curl -H "Content-Type: application/json" -X POST -d '{"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}}' http://localhost:9000/api/members

member.controller.js // post method

// Creates a new member in the DB.
exports.create = function(req, res) {
  Member.findByIdAndUpdate(req.body.participant.nuid,
    { "$setOnInsert": { "_id": req.body.participant.nuid } },
      { "upsert": true },
      function(err,doc) {
        if (err) throw err;
        res.send({
          'redirectUrl': req.protocol + '://' + req.get('host') + '/registration/' + req.body.participant.nuid
        })
    }
  );
};

Expected res.send

 {"redirectUrl":"http://localhost:9000/registration/98ASDF988SDF89SDF89989SDF9898"}  

Working Example GET request Test

var should = require('should');
var app = require('../../app');
var request = require('supertest');

describe('GET /api/members', function() {

  it('should respond with JSON array', function(done) {
    request(app)
      .get('/api/members')
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, res) {
        if (err) return done(err);
        res.body.should.be.instanceof(Array);
        done();
      });
  });
  it('should respond with redirect on post', function(done) {
    // need help here
  });
});

Solution

  • Try with this:

      it('should respond with redirect on post', function(done) {
            request(app)
              .post('/api/members')
              .send({"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}})
              .expect(200)
              .expect('Content-Type', /json/)
              .end(function(err, res) {
                if (err) done(err);
                res.body.should.have.property('participant');
                res.body.participant.should.have.property('nuid', '98ASDF988SDF89SDF89989SDF9898');
    
                 });
              done();
          });