assertnodeassertassert模块提供了一组简单的断言测试,可以用来测试不变量。API文档断言库should.jsAPI文档测试框架(mocha)mocha(摩卡)是一个运行测试的工具。它是一个运行测试脚本(测试源代码的脚本)的工具。1.mocha安装npminstall--globalmocha2.macha测试脚本编写测试脚本:测试源代码的脚本(测试脚本包含一个或多个describe块,每个describe块包含一个或多个it块)。测试脚本应与测试的源代码脚本同名,但后缀名为.test.js(表示测试)或.spec.js(表示规范)。测试套件(describe):表示一组相关的测试,是一个函数。第一个参数是测试套件名称,第二个参数是实际执行的函数。eg:`describe('testsuitename',function(){//实际执行函数内容})`测试用例(it):表示单个测试,是一个函数。第一个参数是测试用例的名称,第二个参数是实际执行的函数。eg:describe('测试套件名称',function(){it('测试用例名称',function(){//实际执行函数内容}})三、mocha使用mocha,直接执行mocha命令运行test目录默认运行test子目录下的测试脚本,可以指定多个测试脚本,在mocha命令后加上测试脚本的路径和文件名eg:mocha//运行test子目录下的测试脚本defaulteg:Testmultiplescriptsmochatest/*.js//shell通配符指定test目录下所有.js后缀mochatest/test1/*.js//shell通配符指定test1下所有.js后缀测试目录下的目录testscript.mochatest/{,**/}*.{js,jsx}//shell通配符指定测试目录下所有子目录下所有.js或.jsx后缀的测试脚本mocha'test/**/*.@(js|jsx)'//node通配符指定测试目录下所有子目录下所有.js或.jsx后缀的测试脚本。注意:如果test目录下有子目录,如果要执行每一层测试用例,需要在mocha后面加上--recursivemocha--recursive。另外mocha还有很多命令行参数。运行mocha--help检查。4、配置文件(mocha.opts)将命令行参数写入配置文件,直接输入mocha即可实现参数功能。如果测试用例没有放在test子目录下,可以在配置文件中加入如下参数:test1-test--recursive//指定运行test1-test目录及其子目录下的测试脚本。五、异步代码(ASYNCHRONOUSCODE)与同步代码(SYNCHRONOUSCODE)<1>异步代码(ASYNCHRONOUSCODE)1、mocha测试异步代码只是在测试完成时调用回调函数(回调函数通常命名为done)。在it块中添加一个回调函数,mocha会在调用这个函数后完成测试。例如:describe('User',function(){describe('#save()',function(){it('shouldsavewithouterror',function(){varuser=newUser('Luna')user.save(function(err){if(err)done(err);elsedone()})})})})//done()函数收到err,上面可以简写为:describe('User',function(){describe('#save()',function(){it('应该保存无误',function(done){varuser=newUser('Luna')user.save(done)})})})2.除了使用done()回调函数,使用Promise还可以返回一个promise(对于返回promises的方法很实用)eg:beforeEach(function(){returndb.clear().then(function(){returndb.save([tobi,loki,jane]);});});3、async/await写法eg:beforeEach(asyncfunction(){awaitdb.clear();awaitdb.save([tobi,loki,jane]);});<2>SYNCHRONOUSCODEtest同步代码mocha会自动测试,参数中的回调函数可以省略。eg:describe('Array',function(){//嵌套在Array用例集下的一个集合,只会执行#indexOf用例集。describe('#indexOf()',function(){it('当值不存在时应该返回-1',function(){assert.equal(-1,[1,2,3],indexOf(4))})})})6.HOOKS(钩子函数)钩子函数:设置测试先决条件或清理测试。before('descriptioninformation',function(){functioncontent})//在此块中的所有测试之前运行after(function(){})//运行beforeEach(functionmyName(){})//在每个测试之后运行runinthisblockafterEach(/*Descriptioninformationisoptional*/function(){})//在这个block中每次测试运行之后运行//运行顺序(它的blocks可以穿插在中间)before()(只运行once)->beforeEach()->afterEach()->after()(只运行一次)注意:钩子函数使用命名,命名将作为函数的描述。所有的钩子函数可以是同步的也可以是异步的。在所有的describe()之外添加根级钩子(可以理解为顶级作用域),这将使根级钩子在每个测试用例之前被调用(不仅在这个文件中,mocha有一个隐藏的描述()称为rootroot-suite)7.浏览器测试mochainit目录//初始化会在目录下生成index.html、./mocha.js和./mocha.css文件。在浏览器中打开index.html,即可在浏览器中查看测试脚本运行结果。八、测试用例管理方法pendingtest:测试用例等待实现。1..only()方法.only()方法:让mocha只测试这个用例集合(describe)或者用例单元(it)。//可以定义多次来定义一系列测试子集或多个测试集或两者的组合。eg://Definemultipletestsetsdescribe('Array',function(){describe.only('#indexOf()',function(){...});//嵌套在Array用例集集合下,只有#indexOf的集合会被执行describe.only('#concat()',function(){...});describe('#slice()',function(){...});})//定义多个测试子集describe('name',function(){it.only('shouldreturn-1unlesspresent',function(){...});it.only('shouldreturn-1unlesspresent',function(){...});it('shouldreturn-1unlesspresent',function(){...});})注:这里有一个钩子函数,钩子函数会实施。2..skip()方法.skip用于跳过某些测试集合和测试用例(跳过的测试用例将被标记为待测试)。//测试用例可以在需要某些特定环境或特殊配置但无法事先确定的情况下使用this.skip()(此时不能使用箭头函数),运行时可以根据情况跳过某些测试用例。注意:在skip()之后,不要在用例函数或者hooks之后执行更多的逻辑,以免逻辑混乱。您可以在before挂钩中使用skip()来跳过多个测试用例或测试集合。九、es6转码es6转码安装babelnpminstall--save-devbabel-registermocha--requirebabel-registe//如果指定文件后缀,需要加上--compilersmochadocument中文翻译文件测试环境(karma)karma:是一款基于Node.js的JavaScript测试执行流程管理工具。主要功能是将项目运行到各种主流浏览器中进行测试。1.Karma安装npminstallkarma--save-dev2.Karma使用karmainit//初始化,会生成一个配置文件(karma.conf.js)1.你想用哪个测试框架?(mocha)2.你想使用Require.js吗?(否)3。你想自动捕获任何浏览器吗?(铬)4。您的源文件和测试文件的位置是什么?(测试/**.js)5。是否应排除先前模式中包含的任何文件?()6.您想让Karma监视所有文件并在更改时运行测试吗?(yes)karmastart//开始测试(会打开浏览器,观察浏览器控制台输出信息)
