【问题标题】:Node.js - simple Restify POST Mocha test failingNode.js - 简单的 Restify POST Mocha 测试失败
【发布时间】:2012-10-10 23:55:16
【问题描述】:

我有一个简单的 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);
});

摩卡测试如下:

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();
            }
        });
    });
});

});

谁能告诉我为什么测试会超时(我在 Mocha 中测试过增加超时),但通过浏览器成功了?

【问题讨论】:

    标签: node.js http-post mocha.js restify


    【解决方案1】:

    问题是当请求完成接收时,Restify 会调用您的 server.post('/post', handler) 函数。您不必等待dataend 事件。这是 Restify(以及其他类似的库,例如 Express)为您做的事情。所以你需要做的就是写

    server.post('/post', function (req, res, next) {
        res.send(200, {ok: 'ok'});
    });
    

    然后你不应该有超时。您遇到了超时,因为您的处理程序正在等待已经到来的事件。

    【讨论】:

    • 知道了。谢谢,这真的很有帮助。问候,本。
    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2020-10-29
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多