断言

node assert
assert模块提供了一组简单的断言测试,可用于测试不变量。

API文档


断言库

should.js

API文档


测试框架(mocha)

mocha(摩卡)是运行测试的工具。就是运行测试脚本(测试源码的脚本)的工具。

一、mocha安装

npm install --global mocha

二、macha测试脚本写法

测试脚本:测试源码的脚本(测试脚本包含一个或多个describe块,每个describe块包括一个或多个it块)。测试脚本要与测试的源码脚本同名,但后缀名为.test.js(表示测试)或者.spec.js(表示规格)。

测试套件(describe):表示一组相关的测试,是一个函数。参数一是测试套件名称,参数二是实际执行函数。
eg:
describe('测试套件名称',function() { //实际执行函数内容 })

测试用例(it):表示一个单独的测试,是一个函数。参数一是测试用例名称,参数二是实际执行函数。
eg:
describe(‘测试套件名称’, function() {
it(‘测试用例名称’, function() {
//实际执行函数内容
}
})

三、mocha使用

mocha,直接执行mocha命令即运行test目录下的测试脚本(默认运行test子目录里的测试脚本);mocha命令后面加上测试脚本的路径和文件名可以指定多个测试脚本。
eg:

mocha //默认运行test子目录下的测试脚本

eg: 测试多个脚本

mocha test/*.js //shell通配符指定test目录下的所有.js后缀测试脚本。
mocha test/test1/*.js //shell通配符指定test目录下test1目录下的所有.js后缀测试脚本。
mocha test/{,**/}*.{js,jsx} //shell通配符指定test目录下所有子目录中所有.js或.jsx后缀测试脚本
mocha 'test/**/*.@(js|jsx)' //node通配符指定test目录下所有子目录中所有.js或.jsx后缀测试脚本。

注意:test目录下存在子目录的情况下,若要每一层测试用例都执行则需要在mocha后面添加–recursive

mocha --recursive

除此之外mocha还有许多命令行参数运行mocha --help可以查看。

四、配置文件(mocha.opts)

将命令行参数写到配置文件中可以直接输入mocha实现参数功能。如果测试用例不放在test子目录可以在配置文件中加入以下参数:

test1-test
--recursive  //指定运行test1-test目录极其子目录中的测试脚本。

五、异步代码(ASYNCHRONOUS CODE) And 同步代码(SYNCHRONOUS CODE)

<1>异步代码(ASYNCHRONOUS CODE)

1、mocha测试异步代码在测试完成时调用回调函数即可(回调函数通常命名为done)。在it块中添加回调函数,mocha就会在这个函数被调用之后完成测试。
eg:

describe('User', function() {describe('#save()', function() {it('should save without error', function() {var user = new User('Luna')user.save(function(err) {if(err) done(err);else done()})})})
})//done()函数接收一个err,以上可以简写为:
describe('User', function() {describe('#save()', function() {it('should save without error', function(done) {var user = new User('Luna')user.save(done)})})
})

2、使用Promise
除了使用done()回调函数,也可返回一个promise(对于返回promise的方法实用)
eg:

beforeEach(function() {return db.clear().then(function() {return db.save([tobi, loki, jane]);});
});

3、async/await写法
eg:

beforeEach(async function() {await db.clear();await db.save([tobi, loki, jane]);
});

<2>同步代码(SYNCHRONOUS CODE)

测试同步代码mocha会自动测试,可省略参数中的回调函数。
eg:

describe('Array', function() {  //在Array用例集下面嵌套的集合,只有#indexOf用例集合会被执行。describe('#indexOf()', function() {it('should return -1 when the value is not present', function() {assert.equal(-1, [1, 2, 3],indexOf(4))})})
})

六、HOOKS(钩子函数)

钩子函数:设置测试先决条件或对测试进行清理。

before('描述信息',function(){函数内容})      //在该区块内所有测试之前运行
after(function(){})                         //在该区块内的所有测试之后运行
beforeEach(function myName(){})             //在该区块内每个测试运行之前运行
afterEach(/*描述信息可有可无*/ function(){}) //在该区块内每个测试运行之后运行
//运行顺序(中间可以穿插it块)
before()(只运行一次)->beforeEach()->afterEach()->after()(只运行一次)

注意:

  1. 钩子函数使用了命名,命名会作为该函数的描述信息。
  2. 所有的钩子函数可以是同步也可以是异步的。
  3. 根级别钩子(可理解为最顶级作用域中)添加在所有describe()外面,这会使得在每个测试用例之前调用该根级别钩子(不仅仅在该文件中,mocha有个暗藏的describe()叫做rootroot-suite)

七、浏览器测试

mocha init catalog //初始化,会在该目录下生成index.html和./mocha.js和./mocha.css文件

在浏览器中打开index.html,就可以在浏览器中查看测试脚本运行结果。

八、测试用例管理方法

pending test:被等待实现的测试用例。

1、.only()方法

.only()方法:让mocha只测试此用例集合(describe)或用例单元(it)。//可以被定义多次来 定义一系列的测试子集或多个测试集合或两种结合使用。
eg:

//定义多次测试集合
describe('Array', function () {describe.only('#indexOf()', function () {...});  //在Array用例集下面嵌套的集合,只有#indexOf用例集合会被执行。describe.only('#concat()', function () {...});describe('#slice()', function () {...});
})
//定义多次测试子集
describe('name', function () {it.only('should return -1 unless present', function () {...}); it.only('should return -1 unless present', function () {...});it('should return -1 unless present', function () {...});
})

注意:有钩子函数,钩子函数会被执行。

2、.skip()方法

.skip用于跳过某些测试集合和测试用例(被跳过的用例会被标记为pending test)。* //测试用例在需要某些特定的环境或者一些特殊的配置但事先无法确定的时候可以使用 this.skip() (此时不能使用箭头函数),根据条件在运行的时候跳过某些测试用例。*

注意:在skip()之后,不要在用例函数或after钩子中执行更多逻辑以避免逻辑混乱。
可以在before钩子中使用skip()来跳过多个测试用例或测试集合。

九、es6转码

es6转码安装babel

npm install --save-dev babel-register
mocha --require babel-registe    //若是指定了文件后缀名则需要加上 --compilers

mocha文档
中文翻译文档


测试环境(karma)

karma:是一个基于Node.js的JavaScript测试执行过程管理工具。主要作用是将项目运行到各种主流的浏览器中进行测试。

一、karma安装

 npm install karma --save-dev

二、karma使用

karma init //初始化,会产生配置文件(karma.conf.js)1. Which testing framework do you want to use ? (mocha)
2. Do you want to use Require.js ? (no)
3. Do you want to capture any browsers automatically ? (Chrome)
4. What is the location of your source and test files ? (test/ **.js)
5. Should any of the files included by the previous patterns be excluded ? ()
6. Do you want Karma to watch all the files and run the tests on change ? (yes)karma start //启动测试(会打开浏览器,观察浏览器控制台输出信息)

测试篇二:关于测试(mocha+karma)相关推荐

  1. 测试篇(二): 如何合理的创建bug、bug的级别、bug的生命周期、跟开发产生争执怎么办

    目录 一.如何合理的创建bug 二.bug的等级 三.bug的生命周期 四.和开发产生争执怎么办 一.如何合理的创建bug 创建Bug的目的就是为了能够让其他人可以尝试复现 一个合格的bug应该包含以 ...

  2. 有什么软件可以测试自己性格,怎样测试自己的性格

    每个人的性格中都有着许多面,正因为它们才组成了一个完整的自己.下面是学习啦小编收集整理关于性格测试的资料,希望大家喜欢. 性格测试篇一 让你锋芒耀眼的反骨指数多高?测试开始: 1.从小到大凡是与未来有 ...

  3. benchmarksql测试mysql_使用benchmarkSQL测试数据库的TPCC

    压力测试是指在MySQL上线前,需要进行大量的压力测试,从而达到交付的标准.压力测试不仅可以测试MySQL服务的稳定性,还可以测试出MySQL和系统的瓶颈. TPCC测试:Transaction Pr ...

  4. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...

    自动化测试模型可以看作自动化测试框架与工具设计的思想.随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 数据驱动测试 前一篇所讲的模块化驱动测试能 ...

  5. ddr老化测试_【鼎阳硬件智库原创︱DDR 】 DDR硬件调试篇:DDR硬件设计调试测试 之二...

    DDR硬件调试篇 前言:大家自己设计的产品出来后都有遇到一些什么样的DDR问题呢?这些问题是否为致命问题,一定要解吗?如果机器已经生产出来,却发现DDR硬件问题导致系统不稳定,机器是否作废了,有没有软 ...

  6. 工控系统及装备M10连接器耐压测试介绍二接上一篇

    工控系统及装备M10连接器耐压测试介绍二接上一篇测试电压 样品应服从于所规定的一定量和一定属性(交流或直流)的测试电压. 6.2.3 测试中的电压上升率 除非另作说明﹐否则测试电压应以接近于500伏/ ...

  7. 显卡3d渲染测试软件,测评荟 篇二:3D建模和3D渲染是吃CPU还是显卡?以及专业图形显卡和游戏显卡的区别...

    测评荟 篇二:3D建模和3D渲染是吃CPU还是显卡?以及专业图形显卡和游戏显卡的区别 2019-09-11 13:20:52 9点赞 32收藏 8评论 编辑:测评荟 首先,专业图形显卡和游戏显卡区别 ...

  8. 小米笔记本pro充电测试软件,显示器 篇二:小米笔记本pro外接aoc u34实现4k+60hz65w充电体验...

    显示器 篇二:小米笔记本pro外接aoc u34实现4k+60hz65w充电体验 2021-01-02 17:56:43 12点赞 23收藏 19评论 创作立场声明:本文所测商品为自费购入.如参加张大 ...

  9. 双轮载人平衡车设计完整教程之调校测试篇

    双轮载人平衡车设计完整教程之调校测试篇 实验及路测结果 6.1 硬件测试 6.1.1车体与元件安装 车体采用的是精钢打造的船型包厢,车体机械部分的安装及重量分布,直接影响到小车的平衡性能.拿起螺丝准备 ...

最新文章

  1. mysql mydumper_mysql数据库备份之mydumper
  2. Nginx 内置 命令启动,停止和重新加载Nginx
  3. C 语言资源大全中文版
  4. 意大利归还中国文物;翟天临咪蒙成考公务员题目;携程回应五一机票涨价;腾讯未成年人网络保护体系上线;这就是今天的大新闻...
  5. Centos7安装vsftpd (FTP服务器)
  6. prerenderspaplugin可以抓取动态数据吗_RPA编程思路之数据抓取
  7. Fastjson存在0day漏洞
  8. 支付宝当面付_没有营业执照也能开支付宝当面付啦
  9. go---- mgo
  10. OpenVINO: export failure: libpython3.9.so.1.0: cannot open shared object file: No such file or direc
  11. 程序员客栈V4.24版本:设置主页访问密码
  12. ccd坏点测试软件,如何检测CCDLCD坏点
  13. 栈 括号匹配问题(C语言)
  14. 三线金叉选股公式,均线、成交量、MACD共振
  15. 网闸的设计原理与误区
  16. 一次函数+机器学习入门
  17. App Inventor 使用BLE发送一串十六进制数据
  18. vm如何压缩磁盘空间_如何释放/收缩vmware虚拟磁盘空间
  19. MPLS基本原理讲解
  20. rs485数据线接反_RS485总线常识,RS485总线常见故障解决办法

热门文章

  1. 软件测试流程及主要内容
  2. 学python有必要用固态硬盘吗-pythonssd
  3. python 证书-Python 发送带自签名证书的 https 请求
  4. 高通平台开发系列讲解(AI篇)如何让yolov5运行在SNPE
  5. Windows系统——ATTCK靶场(一)——MSF方式
  6. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  7. 人脸识别(cv2库的实现)
  8. 线段树(详细注释—pushdown写法)
  9. 温度控制器matlab,某温度控制系统的MATLAB仿真.doc
  10. Xavier 下GMSL相机ROS驱动发布CompressedImage消息(基于NVJPG硬件编码)