NodeJs下的测试框架Mocha简介
简介和代码下载
2011年发布的Mocha是目前最流行的javascript框架之一。在本文中,我们主要关注它在NodeJs上的使用。
如果需要下载示例代码,可以去官网找到。https://mochajs.org/
下载代码后安装依赖项:
$ cd DemoOfMocha $ npm安装的代码目录结构如下所示:
您可以根据代码目录结构在根目录中创建新的lib文件夹和新的test文件夹,然后在test文件夹中创建新的lib文件夹,然后通过npm init命令生成package.json,也可以先下载代码运行。
第一次测试
现在在lib目录中创建新的sum.js文件
出口。sum=function (a,b) {return a b}接下来,测试这个脚本,并在测试目录下的lib文件夹中创建新的测试脚本:sum.js
//test/lib/sum . js var sum=require('././lib/sum ')var assert=require(' assert ')description(' and test of function ',function () {it('1加1应该等于2 ',function () {var expect=11。assert.equal(sum(1,1),expect);})})以上代码是测试脚本,可以独立执行。测试脚本应该包含一个或多个描述块,每个描述块也应该包含一个或多个it块
description block是一个“测试套件”,它代表一组相关的测试,是一个函数,第二个是一个可以实际执行的函数
It块是一个“测试用例”,它代表一个测试,最小的测试单元,也是一个函数。第一个参数是测试用例的名称或描述,第二个参数是实际的可执行函数
Assert是一个断言包(断言包有很多种,这里我用NodeJs自己的断言包)来判断测试代码的执行结果是否与预期结果一致,不一致就抛出错误。在我们的测试脚本sum(1,1)中,结果应该等于2。
这里我们介绍Assert的断言模块的一些功能
断言。fail(实际、预期、消息、运算符)使用指定的运算符来测试实际值是否与预期值一致。
Assert.ok(value,[message])测试实际值是否为真,然后断言。相等(真、值、消息);行动一致
断言。equal(实际的、预期的、[message])使用等价比较运算符(==)来测试真实值是否浅且强制且等于预期值。
断言。不相等(实际的、预期的、[消息])使用不相等的比较运算符(!=)测试真实值是否浅薄、强制、不等于期望值。
断言。DeepEqual(实际、预期、[消息])测试实际值是否等于深层的预期值。
断言。notdeepequal(实际的、预期的、[message])测试实际值是否与预期值深度不相等。
断言。Strictequal(实际的,预期的,[message])使用严格相等运算符(===)来测试实际值是否严格等于预期值。
断言。notstrict equal(实际的、预期的、[message])使用严格不相等的运算符(!==)测试真值是否严格不等于期望值。
断言。throws (block、[error]、[message])在需要block时抛出错误,block可以是构造函数、正则表达式或其他验证程序。
接下来,我们更新package.json中的脚本字段
{ ' name ' : ' DemoOfMocha ',' version': '1.0.0 ',' description': 'demo of mocha ',' main': 'index.js ',' directory ' : { ' test ' : ' test ' },' dependencies': {},' devDependencies ' : { ' test ' : ' node _ env=test mocha test/* * *js'},'关键字' : ['deom ',' mocha'],'作者' :' wjszxli ','许可证
$ npm install mocha - save-dev我们添加了运行测试的命令,然后通过命令获取测试报告
$ npm测试的测试报告如下:
就这样,我们的第一次测试成功了
让检测报告更漂亮
我们可以使用mochawesome模块生成HTML格式的漂亮报表,如图:
使用以下命令安装mochawesome
$ npm安装-保存-开发摩卡真棒然后更新在package.json中的剧本字段
name ' : ' demoofmocha ',' version': '1.0.0 ',' description': 'demo of mocha ',' main': 'index.js ',' directory ' : { ' test ' : ' test ' },' dependencies ' : { ' devdependencies ' : { ' mocha ' 33: '^3.2.0' ',' mocawesome ' 3: '^2.0.4' ',' scripts ' :js运行测试命令,测试报表就在摩卡索-报告中生成了
用浏览器打开下的超文本标记语言页面,我们会看到漂亮的测试报告
异步测试
摩卡默认每个测试用例最多执行2000毫秒,2000毫秒之后没有得到结果,就会报错,如果涉及到异步操作的测试用例,2000毫秒是不够的,这个时候我们需要用相当于表示“有…的”或—超时参数指定超时门槛
我们可以修改在package.json中的剧本字段(我们这里改成3000毫秒)
脚本: { ' test ' : ' NODE _ ENV=test mocha-t 3000超时测试/* */* .js-reporter mocawesome " },写一个异步测试脚本
//测试/lib/超时。jsvar assert=require(' assert ')描述('测试应该3000毫秒后结束,function () { it('测试应该3000毫秒后结束,函数(over){ var a=false;var b=function(){ a=true;断言。ok(a);over();};setTimeout(b,2500);})})这个测试用例在执行它块的时候传入了一个参数完毕,在测试结束的时候必须显式的调用这个函数,告诉摩卡测试结束了,否则摩卡就会等到超时结束的时候报错。
输入命令运行测试用例
我们也可以测试异步请求内部地址或者外部的接口,这里我们请求内部地址为例子:
在根目录新建:app.js
var express=require(' express ')var app=express();app.get('/api/test ',function (req,RES){ RES . send({ })})var port=process。ENV。端口| | 3000 if(进程。ENV。node _ ENV!=='test') { app.listen(端口);console.log('从' http://localhost: '端口开始)} else { module.exports=app}在试验目录下的解放运动文件夹中新建异步。射流研究…
//测试/lib/异步。jsvar http=require(' http ')var assert=require(' assert ')var request=require(' super agent ');描述('测试异步请求,function () { it('测试异步请求返回一个对象,函数(下一个){请求get(' http://localhost :3000/API/test ').end(函数(err,RES){//expect(RES)。去。小心点。一个(' object ');控制台。日志(正文);assert.deepEqual(res.body,Object)next();});})})测试结果
摩卡支持对承诺的测试,允许直接返回答应我,等到他的状态发生变化之后,再执行断言
//test/lib/诺言。jsvar fetch=require(' node-fetch ');var http=require(' http ')var assert=require(' assert ')描述(' Promise异步测试,function () { it('异步承诺返回一个对象,function(){ return fetch(' http://localhost :3000/API/test ').然后(函数(RES){ return RES . JSON();}).然后(函数(JSON){控制台。日志(JSON)断言。Deepequal(JSON,{ });});})})执行测试
测试的钩子
在形容块之中,有四个测试用例的钩子:before()、after()、beforeEach()和在每个()之后。它们会在指定时间执行。
描述(' hooks ',function(){ before(function(){//在当前区块的所有测试用例之前执行});after(function() { //在当前区块的所有测试用例之后执行});beforeEach(function() { //在当前区块的每个测试用例之前执行});afterEach(function() { //在当前区块的每个测试用例之后执行});//测试用例});在试验目录下的解放运动文件夹中新建hooks.js
//test/lib/hooks。jsvar assert=require(' assert ')描述(' hook示例,function(){ var foo=false;在EACH(function(){ foo=true;});它('修改富(中国姓氏)要成功,function(){ assert。ok(foo)});});测试结果
测试用例管理
如果项目中有很多测试用例,但有时只有少数几个想要运行,此时只能使用方法,并且在description block和it block中只允许使用方法,这意味着只允许运行只有的测试用例。
在测试目录下的lib文件夹中创建新的only.js
//test/lib/only . js var sum=require('././lib/sum ')var assert=require(' assert ')description(' and test of function ',function () {it('1加2应该等于3 ',function () {var expect=3。assert.equal(sum(1,2),expect);}) it.only('3加4应该等于7 ',function(){ var expect=7;assert.equal(sum(3,4),expect);})})测试结果:
还有一个skip方法,这意味着跳过指定的测试用例
在测试目录下的lib文件夹中创建新的skip.js
//test/lib/only . js var sum=require('././lib/sum ')var assert=require(' assert ')description(' and test of function ',function () {it('5加6应该等于11 ',function(){ var expect=assert . equal(sum(5,6),expect);}) it.skip('7加8应该等于15 ',function(){ var expect=15;assert.equal(sum(7,8),expect);})})测试结果如下,跳过的用-号表示
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:NodeJs下的测试框架Mocha简介是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。