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

测试篇二:关于测试(mocha+karma)断言 node assert assert 模块提供了一组简单的断言测试 可用于测试不变量 API 文档 断言库 should js API 文档 测试框架 mocha mocha 摩卡 是运行测试的工具 就是运行测试脚本 测试源码的脚本 的工具

大家好,我是讯享网,很高兴认识大家。

断言

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 //默认运行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)


讯享网

讯享网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]); }); }); 
讯享网beforeEach(async function() { await db.clear(); await db.save([tobi, loki, jane]); }); 
<2>同步代码(SYNCHRONOUS CODE)
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() (此时不能使用箭头函数),根据条件在运行的时候跳过某些测试用例。*

九、es6转码

es6转码安装babel

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

测试环境(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 //启动测试(会打开浏览器,观察浏览器控制台输出信息) 

小讯
上一篇 2025-02-27 22:03
下一篇 2025-03-26 18:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61793.html