nodejs 单元测试
之前项目开发因为改进度,基本都是粗放式开发。为了提高代码质量,单元测试是必不可少的。
针对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 单元测试的更多相关文章
- nodejs单元测试
前言: 之前一直听说过单元测试,但是具体怎么做,也没有深入研究,感觉测试是一件很麻烦的事,花费时间.可能是自己太懒了,一看到测试那么多陌生的东西就不想弄了. 然后一拖再拖,直到最近,换了一家公司,然后 ...
- Nodejs单元测试小结
前言 最近在写一课程的Project,用Node写了一个实时聊天小应用,其中就用到了单元测试.在写Node单元测试的时候,一方面感受到了单元测试的重要性,另一方面感受到了Node单元测试的不够成熟,尚 ...
- 使用jasmine-node 进行NodeJs单元测试 环境搭建
关于jasmine就不多说了,关于语法请参加官方文档.http://pivotal.github.io/jasmine/ 关于NodeJS的单元测试框架有多种,如果要在NodeJS中使用jasmine ...
- TDD尝试:nodejs单元测试
单元测试是最小化的测试方式,也是TDD的做法. TDD概念如下图: 通过测试反馈推进开发,ruby是推崇这种编程方式的. nodejs有如下常用单元测试模块 1.mocha Mocha是一个基于nod ...
- PHPStorm中对nodejs项目进行单元测试
安装必要的包 nodejs的单元测试最常用的是使用mocha包.首先确保你本地安装nodejs,之后安装mocha包. npm install mocha -g 然后还需要安装相关的断言工具,Node ...
- 如何在Chrome下Debug Mocha的测试
简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...
- Node稳定性的研究心得
目前大部分Web服务器,如Apache,都使用多线程的方式响应多用户请求,即一个线程服务一个用户请求.这种模式其中一个好处是,当某个请求的线程上抛出的异常没被捕获,只会影响当前这个线程,不会影响其他请 ...
- 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...
- nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告
最近一直在做nodejs,而关于js的单元测试覆盖率网上资料比较少而且吧比较零散,我从网上找来一些资料整理一下分析给大家,希望大家可以少走弯路. 首先我是从windows环境下测试的,用到的工具有 m ...
随机推荐
- Spark基础知识汇总
2,wordcount: val wordcount = sc.textFile()).reduceByKey(_ + _).sortByKey().collect val wordcount = s ...
- 常用正则表达式整理[JavaScript]
URL /^(http\:\/\/|https\:\/\/)(.{4,})$/ 18位身份证号 //前17位数字,末位支持X/^\d{17}\d{1}$|^\d{17}x{1}$/ 手机号 //11位 ...
- Linux-Memory小记
以前我对这块认识很模糊,而且还有错误的认识:今天由我同事提醒,所以我决定来好好的缕缕这块的关系.图: -------------------------------------------1.参数含义 ...
- 自动化运维 Expect
Mac 下载:brew install homebrew/dupes/expect expect : -> 自动化脚本工具: 用于处理交互命令; #注意 调用时并不是使用的 /bin/b ...
- cocoapods真机调试出现问题解决
swift中使用cocoapods时,Podfile中必须写上 use_frameworks! 使用cocoapods导入框架在真机调试出现问题的解决方案: 1.build phases 2.+ ne ...
- .net MVC 简单图片上传
主要完成的是在网页上 上传一张图片到服务器 我搜出来的上传文件代码都特别复杂,对于初学者来说,先解决能上传的问题才最重要,并不需要特别多的功能,仅适合不会上传的初学者,大神请绕路,错误请指出,谢谢 v ...
- 修改Sqlserver实例默认排序规则
1.将sqlserver安装盘加载到虚拟光驱,这里加载到F:盘跟目录 2.cmd进入命令 3.输入命令: F:/Setup /QUIET /ACTION=REBUILDDATABASE /INSTAN ...
- linux的安装
在CentOS 7中提供了两种桌面"GNOME DESKTOP" 和 "KDE Plasa Workspaces",我们以安装"GNOME DESKT ...
- MYsql 数据库密码忘记(Window)
之前想在自己的机器上搭建一个数据库,但是又怕占用内存太大,因此特地从网上下载了一个绿色版,免安装版本的,开始用着 还可以,后来重启机器发现悲催了,数据库用不了了, 决心好好整整Mysql 我的是 版本 ...
- Visual Studio高级调试技巧
1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...