资讯专栏INFORMATION COLUMN

Mocha测试初探

Binguner / 2868人阅读

摘要:是测试用例,表示一个多带带的测试,是测试的最小单位。第一个参数是测试用例的名称加应该等于,第二个参数是一个实际执行的函数。这里对异步代码进行测试时需要注意一点,默认一个单元测试最多执行超时会报错。

Mocha简介:

一个具有丰富特性的javascript 测试框架,支持多种断言库,异步代码测试等,不仅可运行在node.js 环境中还可以运行在浏览器中。

一、安装
// 全局安装
npm install -global mocha
// 在项目中安装
npm install --save-dev mocha
二、写一个简单的测试
2.1 首先新建一个项目,src 下待测试代码,test 下写测试用例。目录如下
//mocha-to-go
|   package.json
|   
+---node_modules
|           
+---src
|       sum.js
|       
---test
        sum.test.js
        
2.2 待测试文件 sum.js
// 求函数所有参数的和
module.exports = sum = function () {
  let args = Array.from(arguments);
  let sum = 0;
  sum = args.reduce((s, x) => {
    return s +=x
  });
  return sum;
}
2.3 新建测试脚本

mocha 支持多种断言库,比如should.js 、expect.js 、chai.js 等,这里以chai.js 为例。选择chai.js 的Expect风格的断言,它是行为驱动开发(BDD)断言的一种,接近于自然语言,容易理解。可运行在所有的浏览器中和node.js中

先安装断言库chai.js

npm install chai --save-dev
const sum = require("../src/sum.js");
const expect = require("chai").expect;

describe("测试 sum(1,2)", function () {
  it("sum(1+2) 应该等于 3", function () {
    expect(sum(1,2)).to.be.equal(3);
  });
});

测试脚本通常包含多个describe块,每个块都含有一个it块,
describe(testName, exceFunc)
describe 第一个参数是这个测试过程的名称,第二个参数应该是一个函数,它包含了我们要测试的内容,也就是我们要执行的过程。
it 是测试用例,表示一个多带带的测试,是测试的最小单位。它是一个函数。第一个参数是测试用例的名称("1 加 1 应该等于 2")
,第二个参数是一个实际执行的函数。

2.4 运行测试脚本

这里我在package.json 中声明了执行脚本

"scripts": {
    "test": "mocha ./test/sum.test.js"
  }

也可以在项目目录直接执行

mocha ./test/sum.test.js

运行结果如图:

三、对异步代码进行测试
3.1 对使用回调函数的异步请求进行测试

Mocha中测试异步代码比较简单,只需要在测试用例结束时调用一下回调函数即可,通常回调函数写作done(),这样、Mocha就能获知这时一个异步函数,回调时才认为测试结束。

新建async.js,这里GET一个存在的json文件,来作为一个异步过程。

const request = require("request");

module.exports = asyncProc = function (callback) {
  request("https://github.com/Will233/koa-template/blob/master/mock/data.json",function (err, res, body) {
    callback(err, res, body)
  });
}

测试脚本

const expect = require("chai").expect;
const request = require("request");

const asyncProc = require("../src/async.js");
describe("测试异步过程", function () {
  it("发送异步请求, response statusCode == 200", function (done){
    asyncProc(function (err, res, body) {
      expect(res.statusCode).to.be.equal(200)
      done()
    })
  });
});
mocha ./test/async.test.js

运行结果如下:

发现报错了。这里对异步代码进行测试时需要注意一点,Mocha默认一个单元测试最多执行2000ms,超时会报错。可在执行的时候用-t--timeout 指定超时阈值。
提高超时时间:

mocha -t 5000 ./test/async.test.js

运行结果如下:

3.2 对使用Promise的异步函数进行测试

Mocha 同样支持了对返回promise的异步代码进行测试。
我们改造一下上面请求的代码,使其返回promise。

// async.js
const asyncPromise = function () {
  return new Promise(function (resolve, reject) {
    request("https://github.com/Will233/koa-template/blob/master/mock/data.json",function (err, res, body) {
        if (err) {
          reject(err)
        } else {
          resolve(res)
        }
    });
  });
}

编写测试用例:

describe("测试异步过程 Promise", function () {
  it("发送异步请求, response statusCode == 200", function (){
    return asyncPromise().then(function (res) {
      expect(res.statusCode).to.be.equal(200);
    });
  });
});

运行结果如下:

四、结语

Mocha 作为一个强大的测试框架,还有很多特性。以后慢慢了解咯。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89719.html

相关文章

  • Mocha 和 Chai 入门初探

    摘要:转载自楼主个人博客和入门初探在和作比较的时候两者主要的不同就是的集成度比较高内置断言库而需要搭配额外的断言库在此选择了比较流行的作为断言库风格的选择其中又有好几种断言风格我们经常见到的其实就是风格的其中我较喜欢因为它可以直接以属性的方式嵌入 转载自楼主个人博客 Mocha 和 Chai 入门初探 Chai 在和 jest 作比较的时候, 两者主要的不同就是 jest 的集成度比较高内置...

    caoym 评论0 收藏0
  • 前端单元测试初探

    摘要:本文只讨论单测的范畴,对集成测试有兴趣的话,可以看下的集成测试代码。前端单测现状测试本质上就是假定一个输入,然后判断得到预期的输出。 原文发于我的博客:https://github.com/hwen/blogS... 要不要写单测? 关于这个 cnode 上就有个很有意思的讨论 做个调查,你的 Node 应用有写单测吗? 看完这个应该会有结论?如果没有,就回帖跟别人探讨下~ 测试 测试...

    isLishude 评论0 收藏0
  • FE.TEST-前端测试初探

    摘要:使用可以快速生成一个项目,其中包含了和以及覆盖率统计的配置参考一个创建测试脚本的快速方法其他参考资料前端自动化测试概览测试之使用对项目进行单元测试 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 测试可以提供快速反馈,根据测试用例覆盖代码,从而提升代码开发效率和质量。根据投入产出价值,通常迭代较快的业务逻辑不做...

    Travis 评论0 收藏0
  • FE.TEST-前端测试初探

    摘要:使用可以快速生成一个项目,其中包含了和以及覆盖率统计的配置参考一个创建测试脚本的快速方法其他参考资料前端自动化测试概览测试之使用对项目进行单元测试 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 测试可以提供快速反馈,根据测试用例覆盖代码,从而提升代码开发效率和质量。根据投入产出价值,通常迭代较快的业务逻辑不做...

    张率功 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<