nodejs單元測試

目錄:

  1. 測試框架
  2. 斷言庫
  3. supertest

1.測試框架

  nodejs的測試框架用的最多的是mocha。mocha誕生於2011年,是如今最流行的測試框架之一,再瀏覽器和node環境中均可以使用。它支持多種nodejs的斷言庫,同時支持異步和同步的測試。node

  ubuntu系統下安裝mocha:git

npm install mocha -g

  案例:github

  新建一個文件夾,文件夾下的目錄分配:web

  lib:存放模塊代碼npm

  test:存放單元測試代碼json

  package.json:包描述文件ubuntu

  編寫一個模塊(lib/min.js)。包含一個方法,這個方法輸出兩個數中比較小的一個數:瀏覽器

exports.min = (num1, num2) => { if(num1 =< num2) return num1 else return num2 }

  給min.js編寫一個對應的單元測試文件(test/min.test.js):cookie

const min = require('../lib/min') describe('min模塊', () => { describe('min方法', () => { it('min should success', () => { min.min(5,6) }) }) })

  在根目錄下執行mocha:(mocha命令默認會去test文件夾下尋找測試文件)框架

  min模塊
    min方法
      ✓ min should success


  1 passing (5ms)

  可是上面的測試有一個很大缺點,並無判斷運行以後能不能獲得正確結果5,這是由於測試沒有加上斷言庫的緣由,下面介紹斷言庫。   

2.斷言庫

  上面案例中只運行了代碼,並無檢測結果是不是預期的結果,若是要對結果加以判斷,還須要使用斷言庫:

  • should.js
  • supertest.js(用於http請求測試)

  使用should爲測試加上斷言:

1)should

  安裝should:

sudo npm install should --save   --registry=http://registry.npm.taobao.org

  加上斷言:

const min = require('../lib/min')
const should =  require('should')

describe('min模塊', () => {
  describe('min方法', () => {
    it('min should success', () => {
      min.min(5,6).should.be.equal(5)
    })  
  })  
})

  此時再命令行再次輸入mocha:

  min模塊
    min方法
      ✓ min should success


  1 passing (6ms)

  和上面的結果同樣,可是意義卻不同了。

  異步測試

  在lib中增長異步函數:

exports.asy = (bk) => {
  setTimeout(() => {
    bk(5)
  }, 10) 
}

  在test文件夾中增長對應的測試文件:

const asy = require('../lib/asy')

describe('asy模塊', () => {
  it('asy函數', done => {
    asy.asy(result => {
    console.log(result) done() }) }) })

3.supertest

再用nodejs作web開發的時候,模擬http請求時是必不可少的,固然使用瀏覽器也能夠方便的實現http請求測試,可是並不快捷。supertest是一個很是好的適用於node的模擬http請求的庫。

 方法:

.set()  用來設置數據

.expect()  用來斷言,如:.expect(200)

.send()  用來發送表單域數據,好比一個登陸模塊

.attach()  主要用來測試文件上傳,因爲send()只能上傳文本域,因此關於multipart-file的上傳須要經過附件來綁定。 

持久化Cookie:

  再不少業務中,須要用戶先登陸纔有權限執行操做,這個時候做爲http請求模擬,必需要能夠保存一些Cookie數據,也就是回話持久化,兩種思路:

  1)再supertest中,能夠一個agent對象,這個對象的API跟直接在supertest上調用各類方法是同樣的,這個request再被屢次調用get和post以後,能夠一路把cookie都保存下來

  2)經過.set(),再發起請求時,調用.set('Cookie', 'a cookie string')

let request  = require('uspertest')
let userCookie
request.post('login')
.end((err, res)  => {
  userCookie = res.header['Cookie']  
})

request.post(''createddd)
    .set('Cookie', userCookie)
    .end(...)

supertest使用的demo:地址

相關文章
相關標籤/搜索