2014-02-06 32 views
0

所以我想單元測試我的ExpresJS路線。它看起來財產以後這樣ExpresJS單元測試(困惑)

server.js

var boards = require('./routes/BoardsRoute.js'); 
app.get('/api/v1/boards/:id', boards.getBoard); 

BoardRoutes.js

exports.getBoard = function(req, res) { 
    BoardModel.find({ 
     name: 'Kanban Board' 
    }, function(err, columns) { 
    if (!err) { 
     return res.send(columns); 
    } else { 
     return console.log(err); 
    } 
}); 
return res.send(board); 
}; 

我想模擬出的BoardModel,因爲這是在調用貓鼬模型(又名數據庫調用)。因爲我認爲單元測試不應該調用數據庫並且沒有服務器在運行。

我應該完全測試getBoards到server.js的app.get()調用。 (由於這些請求apt.get將被集成測試/ e2e測試覆蓋,並且它們是HTTP請求)

我可以看到的所有文檔和框架都必須運行Express Server才能單元測試路由而這個特別的exports.getBoard。

的事情,我試圖做,

使用Sinon.js嘲笑一個fakeServer這樣我就可以測試HTTP請求和方法getBoard。

使用SuperAgent和Super Test將請求發送到服務器。 (我對此感到不舒服,因爲單元測試不應該有服務器runnig)。

我想用摩卡來測試這些路線。

任何幫助將是偉大的,只是爲了澄清我的困惑。

回答

0

我會先測試一下路由是否正確連線,然後測試路由的呼叫是否符合您的預期。

要測試路線,這裏有一種方法可以做到。創建一個路由模塊,只是線了路線:

var routes = {};                           

routes.create = function(app) {                                              
    app.get('/api/v1/boards/:id', boards.getBoard); 
} 

module.exports = routes; 

然後你可以嘲笑應用對象和檢查get方法被調用正確。 (我傾向於使用Sinon.js這一點。)的創建方法將需要從你的應用程序模塊調用:

var app = express(); 
... // set up express 
routes.create(app); 

現在你可以專注於自身的測試getBoard像任何其他模塊。