单元测试是最小化的测试方式,也是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方式生成的覆盖率报表。

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

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

最新文章

  1. Web Js 按键事件……Enter提交事件 Enter Js事件
  2. node基础13:异步流程控制
  3. 模块化编程时,#include到底要放在哪里?
  4. 面试整理之DOM事件阶段
  5. [BS] 小知识点总结-02
  6. C# 中Newtonsoft.Json的安装和使用
  7. 64位ubuntu安装交叉编译工具链,显示找不到命令
  8. KVM网络桥接模式解说
  9. Http协议响应状态类别及说明
  10. Appium环境配置(二)
  11. [jsp] - jsp引入c标签出错
  12. 【C++】STL算法之remove_if
  13. 云平台项目--学习经验--jsrender前端渲染模板
  14. SSH整合 第五篇 struts2的到来
  15. Struts dispatchAction
  16. mybatis支持的jdbc类型
  17. oracle数据库之游标的使用
  18. dev_queue_xmit 发生了什么?skb还会在哪里缓存
  19. 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发
  20. springboot示例参考网站

热门文章

  1. [转]mysql触发器的作用及语法
  2. jsp里post和get的乱码解决问题
  3. Debug无效,不起作用
  4. DAO模式详解
  5. [转]STL之list容器详解
  6. python认识标识符
  7. nc的简单使用
  8. eclipse中代码整体左右移动的方法
  9. C# 执行sql语句批量更新
  10. 最快的 Python Web 框架入门