前言
- 以前就聽說單元測試什麼的,沒怎麼重視,既然這玩意那麼多人吹,肯定有好處,再研究看看。
官網
安裝
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",
"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:'[email protected]'})
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。打開它,即可看見報告。
- 還是很好玩的。