Ben*_*Ben 1 http-post mocha.js node.js restify
我有一个简单的Node.js Rest服务器,它使用Restify提供单个POST服务.我正在尝试编写一个简单的Mocha测试,但它会因超时而失败,尽管成功使用了REST控制台测试(浏览器插件).
我的服务器代码:
/**
* Module dependencies
*/
var restify = require('restify');
var events = require('events');
var util = require('util');
/**
* Create App
*/
var server = restify.createServer({
name: 'test',
version: '0.0.1'
});
var eventsEmitter = new events.EventEmitter();
/**
* Configuraion
*/
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
/**
* Routes
*/
server.post('/post', function (req, res, next) {
var text = "";
req.setEncoding("utf8");
req.on("data", function (chunk) {
text += chunk;
});
req.on("end", function () {
res.send(200, {ok: 'ok'});
});
return next();
});
/**
* Listen
*/
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
Run Code Online (Sandbox Code Playgroud)
摩卡测试如下:
var restify = require('restify');
var assert = require('assert');
// init the test client
var client = restify.createJsonClient({
url: 'http://127.0.0.1:8080',
version: '*'
});
describe('service: post endpoint', function() {
// Test #1
describe('200 response check', function() {
it('should get a 200 response', function(done) {
client.post('/post', { hello: 'world' }, function(err, req, res, data) {
if (err) {
throw new Error(err);
}
else {
if (data.code != 200) {
throw new Error('invalid response from /post');
}
done();
}
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议为什么测试会超时(我已经测试过增加摩卡的超时),但通过浏览器成功?
问题是Restify server.post('/post', handler)会在收到请求后调用您的函数.您不必等待data和end事件.Restify(以及其他类似的库,例如Express)为您做的事情.所以你需要做的就是写作
server.post('/post', function (req, res, next) {
res.send(200, {ok: 'ok'});
});
Run Code Online (Sandbox Code Playgroud)
然后你不应该超时.您正处于超时状态,因为您的处理程序正在等待已经发生的事件.
| 归档时间: |
|
| 查看次数: |
5015 次 |
| 最近记录: |