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 ...
随机推荐
- jdbcTemplate批量插入(添加)
public void addSubscibe(List<PermedipUserSubscribeVo> list) { final List<PermedipUserSubscr ...
- tp5 model 中的查询范围(scope)
查询范围scope在model中定义,在controller中使用 namespace app\index\model; use think\Model; class User extends Mod ...
- 用友U8 归纳采购退货结算三种情况
对应版本: 8.52 问题现象: 客户经常处理退货结算的问题 问题原因: 应系统掌握各种情况 解决方案: 结算前全额退货即已录入采购入库单,但未进行采购结算,并且全额退货.填制一张全额数量的红字采购入 ...
- iOS 系统数字键盘左下角加确定按钮
首先在 viewWillAppear 方法中注册监听相应的键盘通知,并且要在 viewWillDisappear 方法中注销通知- (void)viewWillAppear:(BOOL)animate ...
- vue.js 请求数据
VUE.JS var vm = new Vue({ el:"#list", data:{ gridData: "", }, mounted: function( ...
- android studio使用部分报错处理
1.android studio 导入项目时Error:SSL peer shut down incorrectly 今天导入一个项目到studio,显示在下载一个一个1.1.0-rc4的东西. 过了 ...
- Java面试常见知识点总结(二)
11.构造方法(构造器): 构造方法是一种特殊的方法,具有以下特点. (1) 构造方法的方法名必须与类名相同. (2) 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类 ...
- 在nginx中配置ip直接访问的默认站点
一台机子部署多个网站,我们直接访问ip (外网内网都一样)提示无法访问或404. 因为有多个网站,我们想指定某个网站为IP访问默认的网站,如何操作呢? 解:在Listen ip:port; 这个指令行 ...
- 二.TimesTen原理及应用场景
声明:本文章转自麻袋爸爸 一,TimesTen应用场景 在谈论TimesTen内存数据库应用场景之前,我们先来介绍一下什么是内存数据库,及其工作原理吧.内存数据库,顾名思义就是将数据存放在内存中,并通 ...
- [BI项目记]-TFS Express备份和恢复
在项目中对TFS进行备份操作是日常重要的工作之一,此篇主要描述如何对TFS Express进行备份,并且在另外一台服务器上进行恢复. 以下是操作的几个关键点: 备份数据库,在TFS管理工具中就可以完成 ...