js单元测试有好多个方式, 按照诞生时间依次是Qunit, jasmine, mocha, ava. 其中, ava是15年的项目, 还很新. Qunit和ava的star人数还没有超过1万, jasmine和mocha平分秋色,基本差不多. 考虑到jasmine是比mocha老的项目,而且jasmine最早是针对浏览器端的,而mocha似乎开始时就是针对node.js的, 这儿就选择mocha了.

安装使用

全局安装mocha

npm install -g mocha

项目本地安装chai(assert库)

npm install chai

chai库提供多种assert方式, 后面将举例用expect

示例被测项目, 叫add.js

function add(a, b){
    return a + b
}

function minus(a,b){
    return a - b
}
module.exports = add

测试代码, 叫test.js

var expect = require("chai").expect
var add = require("add")
describe("add", function(){

    it("1+2=3", function(){
        expect(add(1,2)).to.be.equal(3)
    })

})

运行代码

mocha test.js

js经常需要对比object,一般用意是对比内容key和value是否一致,就不能用expect().to.be.equal()了,需要用

expect().to.deep.equal()

其他方面

测试private function,以及mock.

例如, 上面的minus()函数没有通过module.exports导出, 是个私有函数, 如何进行测试? 这儿需要用到rewire. 将rewire安装到项目中.

npm install rewire

测试minus的文件test2.js

var expect = require("chai").expect
var rewire = require('rewire')  // 使用rewire加载被测文件.
var add = rewire("add")
describe("add", function(){
    var minus = add.__get__("minus")  // 使用__get__获取私有函数
    it("1-2=-3", function(){
        expect(minus(1,2)).to.be.equal(-1)
    })

})

rewire还可以使用set来mock函数, 看这儿
关于更多chai的用法, 看这儿

最佳实践

  • 装所有测试文件的目录命名为test,然后在目录上一级运行mocha可以测试所有test中的文件.
  • 文件名为 xx.test.js或者xx_spec.js ,spec是inspect(核查)的简称.
  • 使用npm test运行测试, 需要在package.json中加入:
    "scripts": {
    "test": "mocha"
    }

标签: none 阅读量: 1328

添加新评论