In this lesson, we will use Chai's request method to test our Node application's API responses.
By the end of this lesson, you will know how to:
- install the prerequisites to use mocha and chai in your application
- test for HTTP status response codes
- test for a string of text on a page
- test for a json response and validate the properties of the object
- write tests that not only verify the response of your application, but the behavior as well

  const mockRouter = require('./routes/mock');
  app.use('/mock', mockRouter);

 

// routers/mock.js

const express = require('express');
const router = express.Router();

router
  .get('/', (req, res, next) => {
    res.status(200)
       .json({ title: 'Mock test' })
  })
  .post('/', (req, res, next) => {

    const { v1, v2 } = req.body;
    if (isNaN(Number(v1)) || isNaN(Number(v2))) {
      res.status(400)
         .json({ 'msg': 'You should provide numbers' });
    } else {
      const result = Number(v1) + Number(v2);
      res.status(200)
         .json({ result });
    }
  });

module.exports = router;

 

// test/mock_test.js

const chai = require('chai');
const chaiHttp = require('chai-http');
const should = chai.should();
const server = require('../../src/app');

chai.use(chaiHttp);

describe('/mock GET', () => {
  it('should return json', (done) => {
    chai.request(server)
        .get('/mock')
        .end((err, res) => {
          res.should.have.status(200);
          res.body.should.have.property('title')
             .and
             .that
             .equal('Mock test');
          done();
        })
  });

  it('should return right value', (done) => {
    chai.request(server)
        .post('/mock')
        .set('content-type', 'application/json')
        .send({
          v1: 2,
          v2: 3
              })
        .end((err, res) => {
            res.should.have.status(200);
            res.body.should.have.property('result').that.equals(5);
            done();
        });
  });

  it('should return 400 error', (done) => {
    chai.request(server)
        .post('/mock')
        .set('content-type', 'application/json')
        .send({
                v1: 'tow',
                v2: 'three'
              })
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.have.property('msg').that.contains('provide numbers');
          done();
        });
  });
});