2016-08-17 120 views
1

我是新來測試驅動開發,我想測試我的登錄API,但我似乎無法完全理解如何實現與數據庫測試的,哪些是做的正確方法如何測試登錄API的NodeJS ?採用摩卡和柴

+0

你在用什麼框架? – winter

+0

我正在使用express和sequelize(CLI)作爲ORM。 –

+0

哎呀,對不清楚的問題抱歉。我的意思是,你使用的是什麼樣的web框架? – winter

回答

3

首先,我也沒有這個主題的專家,但我一直在使用這種方法相當長的一段時間。如果有人發現我寫的內容有誤或有些誤導,請糾正我。我對評論家和意見非常開放。

,顧名思義,TDD方法需要您實施之前編寫測試。基本上,你寫測試,看它失敗,寫實現並重復,直到測試通過。

如果使用的是快遞,你可能想使用supertest模塊。他們使用它的方式與superagent類似。您可以通過運行

npm install supertest --save-dev 

我將告訴你如何與摩卡和薛寶釵使用一個非常簡單的例子安裝。

所以這裏的快遞應用的一個例子:

// file: app.js 
const express = require('express'); 
const app = express(); 

// your middlewares setup goes here 

const server = app.listen(8000,() => { 
    console.log('Server is listening on port 8000'); 
}); 

module.exports = app; 

而這裏的登錄API的例子測試用例:

// file: test/api.js 
const request = require('supertest'); 
const app = require('../app'); 
const expect = require('chai').expect; 

describe('Login API', function() { 
    it('Should success if credential is valid', function(done) { 
     request(app) 
      .post('/api/v1/login') 
      .set('Accept', 'application/json') 
      .set('Content-Type', 'application/json') 
      .send({ username: 'username', password: 'password' }) 
      .expect(200) 
      .expect('Content-Type', /json/) 
      .expect(function(response) { 
       expect(response.body).not.to.be.empty; 
       expect(response.body).to.be.an('object'); 
      }) 
      .end(done); 
    }); 
}); 

您可以使用此命令

node_modules/mocha/bin/mocha test/**/*.js 
運行

上面的示例假定您將使用POST方法在/ api/v1/login路徑上實現登錄API。它還假定您將接收並以json格式回覆數據。

的例子測試用例做些什麼,它試圖發送一個POST請求/ API/V1 /數據如下登錄:

{ 
    username: 'username', 
    password: 'password' 
} 

然後,它希望你的API將與200響應代碼響應如下圖所示:

.expect(200) 

如果接收到的代碼爲200以外的代碼,則測試將失敗。

然後,期待您迴應的Content-Typeapplication/json。如果期望不符合現實,測試也將失敗。

這下面的代碼:

.expect(function(response) { 
    expect(response.body).not.to.be.empty; 
    expect(response.body).to.be.an('object'); 
}) 

它會檢查您的服務器的響應。如上所示,您可以在函數體內使用chai的expect。您可能會注意到supertest也提供了expect方法。但是,同時使用supertest期望和chai期望的方式是不同的。

最後,調用end函數與done回調,以便測試用例可以正常運行。

您可能要檢查supertest文檔,以獲取有關如何使用它的更多細節。

建立數據庫連接測試

之前,如果你需要保持運行的所有測試用例之前數據庫連接,這裏的想法:

創建test目錄內的另一個文件。例如,database_helper.js。然後,寫下面的代碼:

before(function(done) { 
    // write database connection code here 
    // call done when the connection is established 
}); 

我已經嘗試過與貓鼬之前,它爲我工作。

我希望有幫助。

+1

增加一些想法:我ususally在每次測試之前用特定數據初始化數據庫。你可以使用'''beforeEach(function(done){});'''。 –

+0

我正面臨以下錯誤https://scontent-sit4-1.xx.fbcdn.net/v/t34.0-12/17821101_1469610449726804_1117021897_n.png?oh=0faa94eb2e5a915d27ab03017eda40e2&oe=58EADD80 –

+0

@RizwanPatel我無法打開鏈接,但我編輯了答案。我沒有注意到這個錯誤,謝謝! – winter