之前项目开发因为改进度,基本都是粗放式开发。为了提高代码质量,单元测试是必不可少的。

针对restful api ,用supertest 测试框架。针对nodejs,引入mocha 和should 可以方便编写单元测试。

首先谈谈supertest,它封装了mocha和expect 模块。用法也比较简洁,例子:

var request = require('supertest');
var express = require('express');
let should=require('should'); var app = require('../app');
var port = process.env.PORT || 3000;
app.set('port', port);
describe('supertest 验证', function() { beforeEach(function() {
console.log('before every test in every suit');
}); it('get 请求', function(done) {
request(app)
.get('/')
.set('Cache-control', 'no-cache')
.expect(200, done);
}); it('Post 请求', function(done) {
request(app) .post('/sayHello')
.set('Content-Type', 'application/json')
.send({
username:'ryan',
password:'chen'
})
.expect('Content-Type', /json/)
.expect(200,{message:"ryan你好"}, done);
}); });

如上代码所示,整体看是比较easy清爽的。可以设置header和对比返回值,至于token的验证,在测试时根据环境变量取消即可。

should 是个好同志,可以帮助我们方便比较。至于用法,如下:

 describe('should test', function () {
"use strict";
beforeEach(function () {
});
it('ok', function (done) {
true.should.be.ok;
(5).should.be.exactly(6).and.be.a.number;
done();
});
it('true',function (done) {
true.should.be.true;
'true'.should.not.be.true;
done();
});
//content compare,not reference
it('eql', function () {
({ foo: 'bar',num:1 }).should.eql({ foo: 'bar',num:1});
//[1, 2, 3].should.eql({ '0': 1, '1': 2, '2': 3 }); });
//to be exactly,
it('equal',function () {
(4).should.equal(4);
'test'.should.equal('test');
[1,2,3].should.be.not.exactly([1,2,3]);
});
//>= or <=
it('within', function () {
(5).should.be.within(5, 10).and.within(5, 5);
(5).should.be.above(0);
});
//.Infinity
it('infinity', function () {
(1/0).should.be.Infinity;
});
//instanceof
it('instanceof', function () {
let ball=new Ball(11,"red");
ball.should.be.an.instanceOf(Ball);
[].should.be.an.instanceof(Array);
}); it('properties',function () {
let ball=new Ball(11,"red"); ball.should.have.properties('color');
ball.should.have.properties({size:11,color:"red"});
});
it('empty', function () {
[].should.be.empty;
''.should.be.empty;
({}).should.be.empty;
(function() {
arguments.should.be.empty;
})();
});
it('containEql', function () {
'hello boy'.should.containEql('boy');
[1,2,3].should.containEql(3);
[[1],[2],[3]].should.containEql([3]);
[[1],[2],[3, 4]].should.not.containEql([3]);
});
//regex
it('regex or function', function () {
['a', 'b', 'c'].should.match(/[a-z]/);
(5).should.match(function(n) { return n > 0; });
(5).should.not.match(function(n) { return n < 0; });
});
it('match each', function () {
[10, 11, 12].should.matchEach(function(it) { return it >= 10; });
}); it('exception', function () {
(function(){
throw new Error('fail');
}).should.throw();
}); it('status',function () {
//res.should.have.status(200);
//res.should.have.header('Content-Length', '123');
//res.should.be.json }) }); class Ball
{
constructor(size,color)
{
Object.assign(this,{size,color});
}
}

可以在控制台,用mocha 命令 测试,会默认找项目根目录下test文件夹,所以单元测试要放到此文件下。执行后,会测试当前文件夹下所有的单元测试:

开发工具如果用的是webstorm,有个比较方便的插件。可在插件里面搜 nodejs,安装后,可在启动配置中添加mocha,

配置后,直接启动

可以看到,这样的话可以选择其中某个测试用例测试,比输入脚本方便了好多。bingo

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

  1. nodejs单元测试

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

  2. Nodejs单元测试小结

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

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

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

  4. TDD尝试:nodejs单元测试

    单元测试是最小化的测试方式,也是TDD的做法. TDD概念如下图: 通过测试反馈推进开发,ruby是推崇这种编程方式的. nodejs有如下常用单元测试模块 1.mocha Mocha是一个基于nod ...

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

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

  6. 如何在Chrome下Debug Mocha的测试

    简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...

  7. Node稳定性的研究心得

    目前大部分Web服务器,如Apache,都使用多线程的方式响应多用户请求,即一个线程服务一个用户请求.这种模式其中一个好处是,当某个请求的线程上抛出的异常没被捕获,只会影响当前这个线程,不会影响其他请 ...

  8. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...

  9. nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告

    最近一直在做nodejs,而关于js的单元测试覆盖率网上资料比较少而且吧比较零散,我从网上找来一些资料整理一下分析给大家,希望大家可以少走弯路. 首先我是从windows环境下测试的,用到的工具有 m ...

随机推荐

  1. PHP中常见的提示对照表

    .Notice: Undefined variable: 变量名 in 注:使用了一个没有被定义的变量 .Parse error: syntax error, unexpected T_ELSE in ...

  2. Burp Suite新手指南

    Burp Suite想必大家都用过,但是大家未必知道它的所有功能.因此,本文的主要目的就是尽量深入介绍各种功能.BurpSuite有以下这些功能: 截获代理– 让你审查修改浏览器和目标应用间的流量. ...

  3. QT特供 CGAL配置流程(基于QT5+VS2015)

    最近做的QT项目涉及计算几何库,需要用到CGAL,其配置着实麻烦,而且相互关联的软件也存在版本兼容一类的问题,在这里就对其配置流程做一些整理说明,以便后来者能够少些烦恼.(注:以下使用Win10作说明 ...

  4. Android SDK Manager无法更新的解决[ 转]

    将下列内容行添加到hosts文件中: 74.125.237.1 dl-ssl.google.com 1.Windows C:\WINDOWS\system32\drivers\etc\Hosts 2. ...

  5. CPrimerPlus第11章第10题

    题目: 编写一个程序,读取输入,直到读入了10个字符串或遇到EOF,由二者中最先被满足的那个终止读取过程.这个程序可以为用户提供一个有5个选项的菜单:输出初始字符串列表.按ASCII顺序输出字符串.按 ...

  6. STM32F412应用开发笔记之五:结合W5500实现以太网通讯

    因实际使用需求我们测试一下网络通讯,在NUCLEO-F412ZG测试板上没有以太网部分,我们选择外接一个W5500的实验板.W5500支持SPI接口通讯,DC3.3V供源.而NUCLEO-F412ZG ...

  7. GPS 气压计高度测量

    气压计测某个点的高度是不准的,因为天气.温度等原因会导致不同时刻同一地点气压不同,所以气压计测量不准.但气压计测量相对高度是很准的.GPS测相对高度不准,但测定点高度比较准.

  8. Html 5 Web Storage

    HTML5 中使用Web Storage 技术进行本地存储,能够在Web 客户端进行数据存储.WebStorage 曾今属于HTML5的规范,目前已经被独立出来形成单独的规范体系.简单来说使用Web本 ...

  9. linux的安装

    在CentOS 7中提供了两种桌面"GNOME DESKTOP" 和 "KDE Plasa Workspaces",我们以安装"GNOME DESKT ...

  10. mvc学习中的问题汇总

    问题1:更新条目时出错.有关详细信息,请参阅内部异常. 初学MVC,正好手上有别人搭建的一个框架.于是直接用了起来.一切似乎都很顺利. 列表页也正常读取了.可是在新增数据时,始终报如上的错.即使用了调 ...