• [Node.js] Test Node RESTful API with Mocha and Chai


    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();
            });
      });
    });
  • 相关阅读:
    git subtree用法
    Excel导入、导出库:ExcelKit
    [C#.NET 拾遗补漏]08:强大的LINQ
    使用.net standard实现不同内网端口的互通(类似花生壳)
    LINQ:最终统治了所有的语言!
    浅谈代码段加密原理(防止静态分析)
    HashTable、HashSet和Dictionary的区别(转)
    Mysql分表和分区的区别、分库分表介绍与区别
    划词高亮功能的实现附带开源代码
    十个推荐使用的 Laravel 的辅助函数
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6784172.html
Copyright © 2020-2023  润新知