2017-02-19 35 views
1

我試圖弄清楚如何首先測試我的節點js休息API應用程序。 到目前爲止,我一直在使用nock攔截和模擬任何http調用,並通過測試我的服務作爲組件。 (組件測試?) 我想開始單元測試我的應用程序,所以我的測試金字塔更平衡,測試會更容易編寫。TDD測試首先Nodejs表示Rest Api - 單元測試中間節點/控制器/路由

在網上搜索我得到了這種方法: http://www.slideshare.net/morrissinger/unit-testing-express-middleware

var middleware = require('./middleware'); 
app.get('example/uri', function (req, res, next) { 
    middleware.first(req, res) 
    .then(function() { next(); }) 
    .catch(res.json) 
    .done(); 
}, function (req, res, next) { 
    middleware.second(req, res) 
    .then(function() { next(); }) 
    .catch(res.json) 
    .done(); 
}); 

(basicly拉動中間件出來並對其進行測試)

,因爲此演示文稿是在2014年我想知道什麼是當前起來到目前爲止,單元測試快速應用的方法?

回答

1

我有同樣的問題,我用另一種方法。 首先我創建包含在我所有的測試,開始節點和導出函數來發送一個HTTP請求的文件:

process.env.NODE_ENV = 'test'; 
var app = require('../server.js'); 

before(function() { 
    server = app.listen(3002); 
}); 

after(function(done) { 
server.close(done); 
}); 

module.exports = { 
    app: app, 
    doHttpRequest: function(path, callback) { 
    var options = { 
     hostname: 'localhost', 
     port: 3002, 
     path: path, 
     method: 'GET', 
     headers: { 
     'Content-Type': 'application/json', 
     'Content-Length': 0 
     } 
    }; 

    var req = http.request(options, 
     function(response) { 
     response.setEncoding('utf8'); 

     var data = ''; 
     response.on('data', function(chunk) { 
      data += chunk; 
     }); 

     response.on('end', function() { 
      callback(data, response.statusCode); 
     }); 
     }); 

    req.end();  
    } 
} 

然後我用我的服務器先前聲明的方法叫:

var doHttpRequest = require('./global-setup.js').doHttpRequest; 
var expect = require('chai').expect; 

describe('status page test', function() { 

    it('should render json', function(done){ 
    doHttpRequest('/status', function(response) { 
     expect(JSON.parse(response).status).to.eql('OK'); 
     done(); 
    }) 
    }); 
});