单元测试是最小化的测试方式,也是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. 数字签名与数字证书以及https

    数字签名与数字证书以及httpshttps://blog.csdn.net/lzghxjt/article/details/79604602

  2. Java系列学习(十三)-字符串

    1.字符串基础 概念:字符串本质是打包字符数组的对象,是java.lang.String类的实例 2.字符串的构造方法 public String() public String(byte[] byt ...

  3. aop 切面demo

    /** * 必须要@Aspect 和 @Component一起使用否则没法拦截通知 * 搞了好久才明白刚刚开始以为时execution里面的配置的问题 * AOP使用很简单的 */@Aspect@Co ...

  4. 2017-5新版ionic3.1 新命令及一些常用命令

    ionic3.1的新命令: # ionic cordova --help //== 查看命令 # ionic cordova resources // 其中 icon.png (1024*1024) ...

  5. XSS攻击前端需注意

    XSS攻击,在WEB安全领域已经是老生常谈的问题,每每提到安全问题,也会首当其冲拿出来说事. 针对XSS攻击的解决方案,也非常成熟,主要就是:对用户输入信息的地方进行转义处理,当然我这里要提起的一个点 ...

  6. [Windows Server 2012] 手工破解MySQL密码

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:破解MySQL ...

  7. strut2 拦截器 使用

    拦截器是strut2里一个很振奋人心的应用.通过配置拦截器可以在action执行之前进行一些初始化或者是其他的操作,但是在action执行之后,返回结果就已经确定,结果是很难改变了(目前我还不知道怎么 ...

  8. 如何将工程推到github上

    首先,读一下这个 Git-Pro中文版 步骤: 在本地文件系统中 git init 在github中新建项目(光新建就行了) 然后,出现下面这张图,打开sourceTree,按照上面的操作进行就行了. ...

  9. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结

    http://blog.csdn.net/xingjiarong/article/details/50561471 1.启动FastDFS tracker: /usr/local/bin/fdfs_t ...

  10. js 获取 鼠标位置 和获取元素位置

    ]; body.addEventListener("mousemove", outpostion); function outpostion() { console.log(&qu ...