我正在试图弄清楚如何首先测试我的节点js rest api app。 到目前为止,我一直在使用nock来拦截和模拟任何http调用,并通过该测试将我的服务作为一个组件。 (组件测试?) 我想开始对我的应用进行单元测试,这样我的测试金字塔就更平衡,测试也更容易编写。
在网上搜索我得到了这种方法: http://www.slideshare.net/morrissinger/unit-testing-express-middleware
CONLbits
(基本上将中间件拉出来并进行测试)
由于此演示文稿是从2014年开始的,我想知道目前最新的单元测试快递应用程序的方法是什么?
答案 0 :(得分:2)
我有同样的问题,我使用了另一种方法。 首先,我创建了一个包含在我的所有测试中的文件,它启动节点并导出一个函数来发送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();
})
});
});