【nodejs】mocha+chai+nyc基礎

前言

  • 以前就聽說單元測試什麼的,沒怎麼重視,既然這玩意那麼多人吹,肯定有好處,再研究看看。

官網

安裝

  • 用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",
  • 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:'[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。打開它,即可看見報告。
    在這裏插入圖片描述
  • 還是很好玩的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章