目录:

  1. 测试框架
  2. 断言库
  3. 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单元测试的更多相关文章

  1. nodejs 单元测试

    之前项目开发因为改进度,基本都是粗放式开发.为了提高代码质量,单元测试是必不可少的. 针对restful api ,用supertest 测试框架.针对nodejs,引入mocha 和should 可 ...

  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. 使用spring @Scheduled注解执行定时任务、

    http://blog.csdn.net/sd4000784/article/details/7745947,留下来备用.

  2. mysql数据库引擎 MyISAM和 InnoDB区别

    1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件 ...

  3. POJ1385 计算多边形的重心

    point gravity_center(point* p,int n) {    double area=0.0;    point ZERO;    ZERO.x = 0;    ZERO.y = ...

  4. PHP 爬取网页中表格数据

    public function spider_j($page) { $url="http://aaa/bbb".$page."_0/"; $fcontents= ...

  5. PHP 监控服务器动态

    预期准备 一个139邮箱,收到邮件后,可以免费给你短信提醒.如果你不需要短信提醒功能,用什么邮箱都可以 另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网 ...

  6. MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  7. C#查找以某个字母开头另一字母结尾的字符串

    using System; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { ...

  8. 在Sublime Text 3 中安装SublimeLinter,Node.js进行JS&CSS代码校验

    转载自:http://www.wiibil.com/website/sublimelinter-jshint-csslint.html 在Sublime Text中安装SublimeLinter,No ...

  9. IE8利用setCapture和releaseCapture解决iframe的拖拽事件

    最近有个需求须要实现左右拖拽功能,页面右边是个iframe页面,在chrome测试通过之后,发现在ie8上面效果不是很理想,最后查找资料得知可以使用ie自带的setCapture和releaseCap ...

  10. yii accessRules用法

    访问控制过滤器(Access Control Filter)访问控制过滤器是检查当前用户是否能执行访问的controller action的初步授权模式. 这种授权模式基于用户名,客户IP地址和访问类 ...