nodejs是服务端开发,他也可以做单元测试,只不过,这个单元测试一般是针对某一个文件或者一个模块而言,我们经常看到github上的很多项目各自的文件夹中都有很多xxx.test.js这样的文件,通常这就是对应该文件夹下的一个xxx.js模块而言的单元测试。nodejs单元测试有mocha这个库,他提供describe,it等语法来做测试。另外,nodejs本身的assert库提供断言功能,也可以借助should库做断言,还有chai依赖库也可以做断言。
一、创建nodejs项目,并加入依赖
mkdir mochatest
cd mochatest
npm init -y
npm install mocha should -D
修改一下scripts脚本中的test命令:
{
"name": "mochatest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha test.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"mocha": "^7.0.0",
"should": "^13.2.3"
}
}
二、编写一个模块app.js
const add = (a,b)=>a+b
const sub = (a,b)=>a-b
const reducer = (a)=>a.reduce((x,y)=>x+y,0)
module.exports = {add,sub,reducer}
三、编写测试代码
require("should")
var app = require("./app")
var assert = require("assert")
describe("mocha unit test",function(){
it("1+2=3",function(){
app.add(1,2).should.equal(3)
})
it("8-5=3",function(){
app.sub(8,5).should.equal(3)
})
it("[1 2 3 4 5].reduce()=15",function(){
app.reducer([1,2,3,4,5]).should.equal(15)
})
it("assert.equal(5,add(2,3))",function(){
assert.equal(5,app.add(2,3))
})
})
四、运行测试 npm run test
示例中,前面三个用例我们使用should做断言,最后一个示例,借助了nodejs自身的assert做断言,这个自带的断言和java中自带的单元测试断言类似,用法也很简单,熟悉java开发的话,应该比较好理解。assert断言很直观,一般做equal判断的话,传入一个actual值,一个expected值,两者如果相等,用例测试通过显示pass。
nodejs单元测试远不止这些内容,还有setTimeout延时,async异步,http网络请求等等的测试,都有相关的测试技巧,只有单元测试做的足够好,我们才会开发出更加的健壮和稳定的代码。后续的集成测试也会少一些错误。