Mocha学习笔记

2018-06-16  本文已影响0人  灬小白

安装

使用npm全局安装:

(c)npm install -g mocha

或者在项目中当作依赖包进行安装:

(c)npm install --save-dev mocha

在文件夹中创建test文件夹,创建文件test.js

const assert = require('assert')
describe('Array', function () {
    describe('#indexOf()', function () {
        it ('当值不存在时,应返回-1', function () {
            assert.equal(-1, [1, 2, 3].indexOf(4))
        })
    })
})

创建package.json,添加运行脚本:

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

现在整个项目的目录结构是这样的

mocha-test/
|
+- test/ <-- 存放所有test
|
|  |+- test.js <-- 测试文件
|
+- package.json <-- 项目配置文件
|
+- node_modules/ <-- npm安装的依赖包

运行

运行脚本,会执行test文件下所有的文件

npm run test
> mocha

  Array
    #indexOf()
      √ 当值不存在时,应返回-1

  1 passing (14ms)

test.js文件中的代码就是测试脚本。测试脚本一般至少要有一个或者多个describe函数,而一个describe函数应有一个或多个it函数。

describe函数,第一个参数会被输出在控制台中,作为一个Test Suite(用例集、测试套件)的描述,而且这个描述可以根据自己的需求来进行嵌套输出的。

it函数,第一个参数是用来输出TestCase(测试用例)的描述,测试输出结果前面有对勾表示测试通过,第二个参数是一个函数,用来编写测试内容,用断言模块来判断测试结果的正确性。

断言

在上面例子中我们用到了assert,这个是Node自身的assert模块(断言),其实mocha支持各种断言库,例如:
should.js
chai
expect.js
better-assert
unexpected

同步代码

在同步代码测试的时候,测试用例一个执行完就继续执行下一个用例
在根目录下创建一个add.js的文件,代码如下

module.exports = function (x, y) {
    return x + y
}

测试文件test.js代码如下

const assert = require('assert')
const add = require('../add')
describe('加法测试', function () {
    it('1加1应等于2', function () {
        assert.strictEqual(add(1, 1), 2)
    })
    it('2加2应等于4', function () {
        assert.strictEqual(add(2, 2), 4)
    })
    it('3加3应等于6', function () {
        assert.strictEqual(add(3, 3), 6)
    })
})

测试结果如下

  加法测试
    √ 1加1应等于2
    √ 2加2应等于4
    √ 3加3应等于6


  3 passing (9ms)

箭头函数

不推荐在Mocha中使用箭头函数,由于this作用域的问题,箭头函数中,this无法正常获取Mocha上下文,这样,在运行下面的代码时,我们会发现第一个测试通过,第二测试会报错提示:this.timeout is not a function

describe('function函数测试', function () {
    it('测试1', function () {
        this.timeout(1000)
        assert.ok(true)
    })
})
describe('箭头函数测试', () => {
    it('测试2', () => {
        this.timeout(1000)
        assert.ok(true)
    })
})

待续...

上一篇下一篇

猜你喜欢

热点阅读