前言
- 以前就听说单元测试什么的,没怎么重视,既然这玩意那么多人吹,肯定有好处,再研究看看。
官网
安装
- 用js的不用装@types。
cnpm i mocha @types/mocha chai @types/chai chai-http nyc -D
package.json配置
- 如果直接执行test配命令mocha,就默认找test文件下的内容,如果需要配置路径:
"test":"mocha -r src/test/*.spec.ts --exit",
- 但是这样不支持typescript,所以还需要加上ts-node/register,这个在mocha官方文档有写。
"test":"mocha -r ts-node/register src/test/*.spec.ts --exit",
- r是支持es6导入模式。- 默认mocha是执行第一层目录内容,如果需要递归查找,需要加–recursive,要指定顺序,需要–file:
"mocha --recursive --require ts-node/register --file test/helper.spec.ts 'test/**/*.spec.ts' --exit",
- nyc的配置是这样:
"coverage":"nyc --reporter lcov npm run test"
- 可以发现mocha和nyc都像脚本一样按顺序走一遍。
编写测试用例
- 首先测试用例一般有个全局配置:
import chai from 'chai'
import chaiHttp from 'chai-http'
chai.use(chaiHttp)
before(async()=>{//会在所有单元测试前执行
})
beforeEach(async()=>{//在每个单元测试前执行
})
afterEach(async ()=>{//每个单元测试之后执行
})
after(async ()=>{//在所有单元测试后执行
})
- 这里面的函数就有点像生命周期一样。一般是把清库同步库之类的全局操作初始操作写进去。关于这些hook,mocha文档例子比较详细。
- 下面这个例子是测试添加用户接口的:
import app from '../index'
import chai ,{expect} from 'chai'
describe('测试用户模块',()=>{
it('添加用户接口',async ()=>{
let result = await chai.request(app)
.post('/user/register')
.set('Content-Type','application/json')
.send({username:'444444',password:'444444',confirm:'44444',email:'444444@qq.com'})
expect(result).to.have.status(200)
expect(result.body).to.have.property('success')
expect(result.body).to.have.property('data')
expect(result.body.success).to.equal(true)
})
})
- chai.request是借助了chai的插件chai-http。其他到底基本上看名字就懂了。具体还要别的需求就看chai官网文档。
代码覆盖率
- 这个就是nyc的用处了,前面package.json配置了nyc后运行它,(首先必须保证测试用例全部通过,否则没用。)然后会生成个文件夹叫coverage。
- 里面有个lcov-report文件夹,有个index.html。打开它,即可看见报告。

- 还是很好玩的。
版权声明:本文为yehuozhili原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。