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

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

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

TDD尝试:nodejs单元测试的更多相关文章

  1. TDD中的单元测试

    TDD中的单元测试写多少才够?   测试驱动开发(TDD)已经是耳熟能详的名词,既然是测试驱动,那么测试用例代码就要写在开发代码的前面.但是如何写测试用例?写多少测试用例才够?我想大家在实际的操作过程 ...

  2. 我的TDD实践---UnitTest单元测试

    我的TDD实践---UnitTest单元测试 “我的TDD实践”系列之UnitTest单元测试 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则 ...

  3. Nodejs单元测试小结

    前言 最近在写一课程的Project,用Node写了一个实时聊天小应用,其中就用到了单元测试.在写Node单元测试的时候,一方面感受到了单元测试的重要性,另一方面感受到了Node单元测试的不够成熟,尚 ...

  4. nodejs 单元测试

    之前项目开发因为改进度,基本都是粗放式开发.为了提高代码质量,单元测试是必不可少的. 针对restful api ,用supertest 测试框架.针对nodejs,引入mocha 和should 可 ...

  5. nodejs单元测试

    前言: 之前一直听说过单元测试,但是具体怎么做,也没有深入研究,感觉测试是一件很麻烦的事,花费时间.可能是自己太懒了,一看到测试那么多陌生的东西就不想弄了. 然后一拖再拖,直到最近,换了一家公司,然后 ...

  6. TDD中的单元测试写多少才够?

    测试驱动开发(TDD)已经是耳熟能详的名词,既然是测试驱动,那么测试用例代码就要写在开发代码的前面.但是如何写测试用例?写多少测试用例才够?我想大家在实际的操作过程都会产生这样的疑问. 3月15日,我 ...

  7. 使用jasmine-node 进行NodeJs单元测试 环境搭建

    关于jasmine就不多说了,关于语法请参加官方文档.http://pivotal.github.io/jasmine/ 关于NodeJS的单元测试框架有多种,如果要在NodeJS中使用jasmine ...

  8. 2017秋-软件工程第四次作业(2)-结对使用TDD框架完成单元测试

    第一次接触“单元测试”这个要求,我和队友学习了一些示例后开始操作.如下展示一些建立单元测试的过程.Step1:右键单击[解决方案]->左键单击[添加(D)]->[新建项目(N)]. Ste ...

  9. PHPStorm中对nodejs项目进行单元测试

    安装必要的包 nodejs的单元测试最常用的是使用mocha包.首先确保你本地安装nodejs,之后安装mocha包. npm install mocha -g 然后还需要安装相关的断言工具,Node ...

随机推荐

  1. Fckeditor使用方法

    下载地址 http://ckeditor.com/download <?php require('../fckeditor/fckeditor.php'); ?> <html> ...

  2. 357 Count Numbers with Unique Digits 计算各个位数不同的数字个数

    给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n.示例:给定 n = 2,返回 91.(答案应该是除[11,22,33,44,55,66,77,88,99 ...

  3. [转]linux之pr命令

    转自:http://www.bitscn.com/plus/view.php?aid=6638 本文介绍如何使用Linux的pr命令将大文件分割成多个页面进行打印,并在每个页面上加上标题. Linux ...

  4. [ HAOI 2010 ] 最长公共子序列

    \(\\\) \(Description\) 求两个长度\(\le5000\)的大写字母串的\(LCS\)长度及个数,定义两\(LCS\)中某一字符在两序列出现位置有一处不同就视为不同. \(\\\) ...

  5. Android sensor 系统框架 (一)

    这几天深入学习了Android sensor框架,以此博客记录和分享分析过程,其中难免会有错误的地方,欢迎指出! 这里主要分析KERNEL->HAL->JNI这3层的流程.主要从以下几方面 ...

  6. SQL基本操作——DROP撤销索引、表以及数据库

    DROP撤销索引.表以及数据库 --DROP INDEX 命令删除表格中的索引 DROP INDEX table_name.index_name --DROP TABLE 语句删除表(表的结构.属性以 ...

  7. 【sqli-labs】 less47 GET -Error based -String -Order By Clause(GET型基于错误的字符型Order By从句注入)

    http://192.168.136.128/sqli-labs-master/Less-47/?sort=1 改变sort的值,结果仍然是order by 1的结果 http://192.168.1 ...

  8. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  9. day10-函数基础知识

    函数 什么是函数 把工具事先准备好,然后下次使用的时候,直接使用就行了.我们的函数就是工具 为何用函数 1.遇到重复的功能只能重复编写实现代码,代码冗余 2.功能需要扩展时,需要找出所有实现该功能的地 ...

  10. CentOS7.2下安装php加速软件Xcache

    说明: php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini Nginx安装目录:/usr/local/nginx Nginx ...