nodejs单元测试
目录:
- 测试框架
- 断言库
- supertest
1.测试框架
nodejs的测试框架用的最多的是mocha。mocha诞生于2011年,是现在最流行的测试框架之一,再浏览器和node环境中都可以使用。它支持多种nodejs的断言库,同时支持异步和同步的测试。
ubuntu系统下安装mocha:
npm install mocha -g
案例:
新建一个文件夹,文件夹下的目录分配:
lib:存放模块代码
test:存放单元测试代码
package.json:包描述文件
编写一个模块(lib/min.js)。包含一个方法,这个方法输出两个数中比较小的一个数:
exports.min = (num1, num2) => {
if(num1 =< num2) return num1
else return num2
}
给min.js编写一个对应的单元测试文件(test/min.test.js):
const min = require('../lib/min')
describe('min模块', () => {
describe('min方法', () => {
it('min should success', () => {
min.min(5,6)
})
})
})
在根目录下执行mocha:(mocha命令默认会去test文件夹下寻找测试文件)
min模块
min方法
✓ min should success 1 passing (5ms)
但是上面的测试有一个很大缺点,并没有判断运行之后能不能得到正确结果5,这是因为测试没有加上断言库的原因,下面介绍断言库。
2.断言库
上面案例中只运行了代码,并没有检测结果是否是预期的结果,如果要对结果加以判断,还需要使用断言库:
- should.js
- supertest.js(用于http请求测试)
使用should为测试加上断言:
1)should
安装should:
sudo npm install should --save --registry=http://registry.npm.taobao.org
加上断言:
const min = require('../lib/min')
const should = require('should')
describe('min模块', () => {
describe('min方法', () => {
it('min should success', () => {
min.min(5,6).should.be.equal(5)
})
})
})
此时再命令行再次输入mocha:
min模块
min方法
✓ min should success 1 passing (6ms)
和上面的结果一样,但是意义却不一样了。
异步测试
在lib中增加异步函数:
exports.asy = (bk) => {
setTimeout(() => {
bk(5)
}, 10)
}
在test文件夹中增加对应的测试文件:
const asy = require('../lib/asy')
describe('asy模块', () => {
it('asy函数', done => {
asy.asy(result => {
console.log(result)
done()
})
})
})
3.supertest
再用nodejs做web开发的时候,模拟http请求时是必不可少的,当然使用浏览器也可以方便的实现http请求测试,但是并不快捷。supertest是一个非常好的适用于node的模拟http请求的库。
方法:
.set() 用来设置数据
.expect() 用来断言,如:.expect(200)
.send() 用来发送表单域数据,比如一个登录模块
.attach() 主要用来测试文件上传,由于send()只能上传文本域,所以关于multipart-file的上传需要通过附件来绑定。
持久化Cookie:
再很多业务中,需要用户先登录才有权限执行操作,这个时候作为http请求模拟,必须要可以保存一些Cookie数据,也就是回话持久化,两种思路:
1)再supertest中,可以一个agent对象,这个对象的API跟直接在supertest上调用各种方法是一样的,这个request再被多次调用get和post之后,可以一路把cookie都保存下来
2)通过.set(),再发起请求时,调用.set('Cookie', 'a cookie string')
let request = require('uspertest')
let userCookie
request.post('login')
.end((err, res) => {
userCookie = res.header['Cookie']
})
request.post(''createddd)
.set('Cookie', userCookie)
.end(...)
supertest使用的demo:地址
nodejs单元测试的更多相关文章
- nodejs 单元测试
之前项目开发因为改进度,基本都是粗放式开发.为了提高代码质量,单元测试是必不可少的. 针对restful api ,用supertest 测试框架.针对nodejs,引入mocha 和should 可 ...
- 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 ...
随机推荐
- pointer to function
指针.函数.数字.结构体.指针函数.函数指针 初学不好区分,做点儿实验来有效区分一下,以下代码采用dev-C++平台测试 //pointer to fucntion 函数功能是 基地址加偏移量得到偏移 ...
- theano 实现图像局部对比度归一化
很多时候我们需要对图像进行局部对比度归一化,比如分块CNN的预处理阶段.theano对此提供了一些比较方便的操作. 局部归一化的一种简单形式为: 其中μ和σ分别为局部(例如3x3的小块)的均值和标准差 ...
- QTP对象识别tips
1.已添加的对象无法再次识别成功,编辑对象存储库中测试对象详细信息.子对象无法识别成功时,先检查父对象是否可成功识别. 2.使用.NET Windows Forms 侦测器检测后再使用object s ...
- WPF(WP7、WP8)实现圆形图片
在WP平台上制作图片圆角其实特别简单, 用Image控件的Clip属性即可(RadiusX-Y设置为图片尺寸的一半) <Image Source="{Binding photo}&qu ...
- 使用 AdaBoost 元算法提高分类器性能
前言 有人认为 AdaBoost 是最好的监督学习的方式. 某种程度上因为它是元算法,也就是说它会是几种分类器的组合.这就好比对于一个问题能够咨询多个 "专家" 的意见了. 组合的 ...
- UE4 VR 模式全屏 4.13
以前写了一个4.11版本全屏,高版本的没用所以也不清楚情况,最近出了4.13,刚好新项目要用上打包出来以后发现,控制台命令fullscreen没有用了, 被stereo on 替代,但是还是没有全屏, ...
- git和SVN交互(待完善)
右键 git bash here 然后从SVN同步代码,git status命令,用来确认版本库状态 右键 --> TortoiseGit --> show log 打开日志 查看gi ...
- 转:WebService通用接口
看到许多中小项目的webservice接口的源代码,不禁有个吐槽的冲动.除了会用CXF,Axis2等神级框架,其他的懒得动了,都是Ctrl+V,Ctrl+C,把其他模块的Request,Respons ...
- Obiee11g变量
原文地址:http://xee123.blog.163.com/blog/static/277119942012612104438332/ Obiee 版本 11.1.1.5 库变量 库变量在同一时刻 ...
- 「LINUX资料」基础命令概览(一)