初学JavaScript测试框架Mocha,和断言库Chai

初学JavaScript测试框架Mocha,和断言库Chai

在github上的案例

环境配置: vscode

官方网站介绍

Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases. Hosted on Github. 我简单理解一下。Mocha是一个JS测试框架,运行在Node.js和浏览器中,让异步测试变得简单有趣。当映射未捕获的异常到正确的测试案例,考虑到allowing for灵活和精确的报告, Mocha测试连续地serially运行。

看一下放到github上的文档

在文档中想找可以直接使用cdn然后用<script>在浏览器中运行这种,看一下这个Running Mocha in teh Browser,但是主要用npm来安装mocha包。

首先安装,文档写到

$ npm install mocha
$ mkdir test
$ $EDITOR test/test.js # or open with your favorite editor

这里我是用的是vscode,所以默认这个$EDITOR应该就是“code",我在终端输入code test/test.js,这个会在这vscode工具中test文件夹里创建一个test.js文件。至于后面这个”#“是什么意思,我也没弄明白,可能只是注释的意思吧。其实我之前想这是不是向文件里写内容呢,然而测试的时候并不是这样。

在终端要输入./node_modules/mocha/bin/mocha,就会运行,mocha会自动执行根目录下test文件夹下的文件test.js。这里有个误区,记得不是像这样node test/test.js用。

其实看到下面的案例,我也懵了

var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal([1, 2, 3].indexOf(4), -1);
    });
  });
});

什么是describe?中文意思是描述,形容的意思。这个方法describe()中第一个参数看起来也没什么实际意义,就是描述一下正在做的事。如果这里我们在做的是和Array相关的事。然后第二个参数回调函数里面继续嵌套一个describe()方法,所以这个可以不停的嵌套。

至于这个describe()方法在哪来的,官方文档也找不到说明,也没有解释。可以看一下这个文章A guide to mocha’s describe(), it() and setup hooks, 然后在stackoverflow中看到这篇文章What is describe() in Mocha,可以理解,这世上有一种东西叫做规范。大家都遵循规范做事。然后这个"#indexOf()"中的#是指当涉及一个方法的名字时用。不过看官方文档中的INTERFACES-BDD,指出这个BDD接口interface提供了describe(), it()。那什么是BDD?google一下,Behaviour-Driven Development行为驱动开发,这个大家有兴趣自己看一下。

it()方法又是什么意思?中文意思是它。所以describe+it大概理解称是描述一下它。不过it里面的和describe就有些不一样了。it是真实的测试一个实例。回调函数中是要测试的内容,第一个参数是描述这个测试的内容要达成什么样的结果。

assert中文意思是断言,声称,主张的意思,也可查google一个词汇和wikipedia中的解释。举个列子我assert断言1+1等于2,描述它这个值应该等于2,然后我们来检验一下是不是对的。然后assert的来源,看官方文档,其实是使用的Node.js内嵌的assert模块。其实有必要使用Node.js按照官方文档去测试一番。

chai是什么?chai只是一种风格,就像每个人都有自己的写代码风格。看它的官方网页。它提供了几种风格如,你觉得那种用起来爽就用哪种

[1,2,3].indexOf(4).should.equal(-1)
expect([1,2,3].indexOf(4)).to.equal(-1)
assert.equal([1,2,3].indexOf(4), -1)

assert.equal()哪来的?看node文档assert.equal(actual, expected[,message])。第一个参数是实际actual,第二个参数是期望的expected,第三个参数是message,看下文档里有解释,是可选的。

之后为了方便,这package.json里面设置一下

"scripts"{
	"test": "mocha"
}

后面可以很方便的使用

$ npm test
// 等于执行./node_modules/mocha/bin/mocha
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章