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

针对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. WebForm 分页、组合查询--2017年1月5日

    sql = "select * from Commodity"; hs = new Hashtable(); if (txt_name.Text.Trim() != "& ...

  2. Ruby on Rails 创建https应用

    1. 创建证书请求文件条件:私钥+证书签名请求+opensslyum install -y opensslmkdir /root/ssl/ && cd /root/ssl/openss ...

  3. Mosquitto pub/sub服务实现代码浅析-主体框架

    Mosquitto 是一个IBM 开源pub/sub订阅发布协议 MQTT 的一个单机版实现(目前也只有单机版),MQTT主打轻便,比较适用于移动设备等上面,花费流量少,解析代价低.相对于XMPP等来 ...

  4. sort()基础知识总结+超简短的英文名排序写法

    结合前些天学的箭头函数我想到一种非常简短的sort排序写法:(这可能是最短的英文名排序方法了) 贴出来大家一起探讨一下: [4,1,2,32].sort((x,y)=>x>y); //[1 ...

  5. SpringMVC

    使用注解去完成整个项目 安装spring的一个插件,则相关的提示就会出来

  6. iOS Universal Links(通用链接)

    公司的运维,发现最近大量的请求 /.well-known/apple-app-site-association这个文件,造成了大量的404,可是这是谁请求的呢? 其实是苹果从iOS9.3开始更改了通用 ...

  7. C# List<T> 合并、去重、查找

    List<,,,,,}; List<,,,,}; listA.AddRange(listB );//把集合A.B合并 List<int> Result = listA.Unio ...

  8. SecureCRT如何与Linux虚拟机进行关联

    首先在宿主机上确认虚拟网卡是否正确工作,并查看其IP地址,如本例中,宿主机的虚拟网卡VMnet8的IP地址为:192.168.121.1/24. VMnet8是VMware用于NAT连接的虚拟网卡. ...

  9. ble示例代码

    ble代码下载: https://github.com/sutogan4ik/Android-BLE-GATT-Master-Slave

  10. HDU5988 Coding Contest(费用流)

    2016青岛现场赛的一题,由于第一次走过不会产生影响,需要拆点,不过比赛时没想到,此外还有许多细节要注意,如要加eps,时间卡得较紧要注意细节优化等 #include <iostream> ...