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 ...
随机推荐
- ms08-067漏洞--初识渗透测试--想必很多初学者都会遇到我文中提及的各种问题
最近读了一本书--<<渗透测试实践指南>>,测试了书中的一些例子后,开始拿ms08-067这个经典的严重漏洞练手,实践当中遇到诸多问题,好在一一解决了,获益匪浅. 在谷歌搜索的 ...
- 更新Xcode后插件失效问题
Xcode更新后插件会失效,这个时候需要给插件的Info.plist文件添加新Xcode的UUID 一.首先找到更新后的Xcode的DVTPlugInCompatibilityUUID: 打开路径: ...
- iOS UIAlertController跟AlertView用法一样 && otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法
今天写弹出框UIAlertController,用alertView习惯了,所以封装了一下,跟alertView用法一样,不说了,直接上代码: 先来了解一下otherButtonTitles:(nul ...
- AndroidStudio使用过程中遇到的bug
Ref:http://www.cnblogs.com/jingmo0319/p/5781878.html 1. Error:Execution failed for task ':app:transf ...
- sqlval
SQL_STRUCTURE sqlvar { short sqltype; short sqllen; _SQLOLDCHAR *SQL_POINTER sqldata; short *SQL_POI ...
- 修改WAMP中mysql默认空密码
WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车 ...
- CSS 布局
近日开发中,总感觉页面布局方面力不从心.以前也曾学过这方面的内容,但是不够系统,因此我打算整理一下. 在web 页面中一般有 table 和 css+div 两种布局方式. 其中css+div 又分为 ...
- ***HTML +CSS 总结与归纳
一.首先W3C标准 结构.表现.动作 与 html.css.javascript相对应,它本意是结构表现分离,而且按照html规范编写结构. 标签方面: -所有标签都要小写.关闭.并且合理嵌套,i ...
- 【转载】兼容php5,php7的cURL文件上传示例
转载来自: http://www.huanlinna.com/2016/06/25/coding/php5-php7-upload-demo-via-curl.html https://segment ...
- 五分钟搭建起一个包含CRUD功能的JqGrid表格
之前的项目也曾用过JgGrid对它的基本功能也是略有了解,网上有个国外的开源的项目,但是不适合个人的风格,所以花了3天空余的时间封装了下JqGrid,也算是参加开发工作10个月以来写的第一个比较完整的 ...