目录:

  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. ENTITYFRAMEWORKCORE 二使用配置文件来配置数据库链接

    首先 配置文件现在已经变成appsettings.json, 先添加一个连接字符串 "ConnectionStrings": { "PWDatabase": & ...

  2. [转]SQL Relay使用

    一.SQL Relay是什么? SQL Relay是一个开源的数据库池连接代理服务器 二.SQL Relay支持哪些数据库? * Oracle * MySQL * mSQL * PostgreSQL ...

  3. 安装mongodb 远程服务器报错

    安装的时候百度了各种教程 就是装不上 结果原因看下图吧  后面这神秘代码是什么鬼 加上后就能正常下载了

  4. iOS UITableViewCell滑动删除

    一般我们使用列表的形式展现数据就会用到UITableView.在熟练掌握了用UITableView展示数据以后,开发过程中可能会遇到需要删除数据的需求,我们想实现在一行数据上划动一下,然后出现一个删除 ...

  5. bookstores网上书店测试缺陷报告1

    Bookstore网上书店系统测试缺陷报告   缺陷编号 01.01.0001 发现人 吴赵昕 记录日期 2016-06-10 所属模块 购物车 确认人 吴赵昕 确认日期 2016-06-10 当前状 ...

  6. Python常用函数、方法、模块记录

    常用函数: 1.pow():乘方 2.abs():绝对值 3.round():四舍五入 4.int():转换为整数 5.input():键盘输入(会根据用户的输入来做类型的转换) raw_input( ...

  7. TeeChart常用编程语句汇总(C#)

     我用的是C# 从网上看到资料拷贝过来备忘,共同学习下: 设置chart标题:axTChart1.Header.Text.Add("标题"); 修改标题:axTChart1.Hea ...

  8. ReportViewer中修改rdlc图表中显示的数据

    将rdlc以xml的格式打开,修改里面的数据,实现方式如下: public MemoryStream GenerateRdlc()    { XmlDocument xmlDoc = new XmlD ...

  9. Cocos2d-x建工程时避免copy文件夹和库

    方法一:(官方做法) 打开F:\cocos2d-1.0.1-x-0.9.1目录下的cocos2d-win32.vc2010.sln文件,然后右键点击解决方案,选择"添加"—&quo ...

  10. css技巧收集

    1. 使用 :not() 为导航添加/取消边框 传统的方法为导航栏添加边框: /* add border */ .nav li { border-right: 1px solid #666; } /* ...