目录:

  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. centos系列——1

    今天开始好好学一下centos,下面记录全过程,以方便后来查阅. 开机后用户名为root. 忘记密码修改方法: 以GRUB 多系统引导程序启动,用GRUB引导系统进入单用户步骤:(1) 启动GRUB, ...

  2. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  3. C#异常语句

    try: 用于检查发生的异常,并帮助发送任何可能的异常. catch: 以控制权更大的方式处理错误,可以有多个catch子句. finally :无论是否引发了异常,finally的代码块都将被执行. ...

  4. cookie httponly属性

    Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be a ...

  5. HTTP、FTP状态码 (share)

    来源:http://www.cnblogs.com/setsail/archive/2012/03/23/2413577.html HTTP1xx - 信息提示(这些状态代码表示临时的响应.客户端在收 ...

  6. echarts图表标签(axisLabel)折行

    在项目中遇到了一个echarts图表标签过长需折行的需求,so引出这篇总结,啦啦啦有帮助就多多支持啦,撒花撒花撒花~~~~ 在此不对echarts其他用法做解释,详细见echarts文档(点击前往) ...

  7. Spring配置文件详解 - applicationContext.xml文件路径

    spring的配置文件applicationContext.xml的默认地址在WEB-INF下,只要在web.xml中加入代码 org.springframework.web.context.Cont ...

  8. asd

    弹出输入提示框 :window.prompt(); 24. 指定当前显示链接的位置 :window.location.href="URL" 25. 取出窗体中的所有表单的数量 :d ...

  9. iOS与JS交互实战篇(ObjC版)

    前言 ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只介绍iOS7.0后出来的JavaScriptCore framework. 关于JavaS ...

  10. DLL编程学习

    原文出处:http://www.blogjava.net/wxb_nudt/archive/2007/09/11/144371.html DLL编写教程 半年不能上网,最近网络终于通了,终于可以更新博 ...