• TDD尝试:nodejs单元测试


    单元测试是最小化的测试方式,也是TDD的做法。

    TDD概念如下图:

    通过测试反馈推进开发,ruby是推崇这种编程方式的。

    nodejs有如下常用单元测试模块

    1.mocha

    Mocha是一个基于node.js和浏览器的集合各种特性的Javascript测试框架,并且可以让异步测试也变的简单和有趣。Mocha的测试是连续的,在正确的测试条件中遇到未捕获的异常时,会给出灵活且准确的报告。

    安装: 

    npm install -g mocha
    const assert = require("assert");
    
    describe('Array', function() {
        describe('#indexOf()', () => {
            it('should return -1 when the value is not present', () =>{
                assert.equal(-1, [1,2,3].indexOf(5));
                assert.equal(-1, [1,2,3].indexOf(0));
            });
        });
    });

    describe里面第一个参数为输出展示该测试段的目标,第二个参数为回调,里面写需要测试的case。

    进行测试:

    mocha filename

    可以用于测试utils里面封装的常用函数,个人认为适合一些非http请求类代码测试。

    2.should

    require("should");
    
    var name = "tonny";
    
     
    
    describe("Name", function() {
    
        it("The name should be tonny", function() {
    
            name.should.eql("tonny");
    
        });
    
    });
    
     
    
    var Person = function(name) {
    
        this.name = name;
    
    };
    
    var zhaojian = new Person(name);
    
     
    
    describe("InstanceOf", function() {
    
        it("Zhaojian should be an instance of Person", function() {
    
            zhaojian.should.be.an.instanceof(Person);
    
        });
    
     
    
        it("Zhaojian should be an instance of Object", function() {
    
            zhaojian.should.be.an.instanceof(Object);
    
        });
    
    });
    
    describe("Property", function() {
    
        it("Zhaojian should have property name", function() {
    
            zhaojian.should.have.property("name");
    
        });
    
    });

    should的用法让测试代码可读性更强。

    3.supertest

    用于http请求测试。

    const request = require('supertest');
    const express = require('express');
    
    const app = express();
    
    app.get('/user', function(req, res){
      res.send(200, { name: 'tobi' });
    });
    
    request(app)
      .get('/user')
      .expect('Content-Type', /json/)
      .expect('Content-Length', '20')
      .expect(200)
      .end(function(err, res){
        if (err) throw err;
      });

    之前我们遇到的中间件检查问题,就可以通过这个模块来进行不同case的测试,保证接口逻辑上无偏差。

    4.istanbul 代码覆盖率检查工具

    用法 :

    istanbul cover filename

    命令行模式会显示覆盖率情况。

    之后会生成coverage文件夹,里面有html方式生成的覆盖率报表。

    其实单元测试在一些业务相对稳定,但是逻辑情况比较复杂的项目中可以对于一些重要的代码进行全覆盖测试,代码的稳健不光是靠编程技术和思维,也需要一定的辅助测试,在多人团队协作开发中愈发重要。

    单元测试和编程语言类型无关,它是一种良好的编程习惯

  • 相关阅读:
    angular4 跨域携带cookie的设置
    引入第三方库jquery
    禁用输入框 浏览器的自动补全功能
    Mongodb 安装和启动
    chrome浏览器的表单自动填充
    jquery原生对象
    js获取文档高度
    字体在各个浏览器中的样式问题
    jquery中的ajax参数说明
    JavaScript中的面向对象
  • 原文地址:https://www.cnblogs.com/freephp/p/9380257.html
Copyright © 2020-2023  润新知