【问题标题】:restify tape test hang恢复磁带测试挂起
【发布时间】:2014-10-02 02:28:26
【问题描述】:

我正在尝试使用磁带来测试用 restify 构建的 API。我遇到的问题是测试在某些“超时”或发生某些事情之前无法完成。测试套件只是挂起。这是我正在使用的一个简单测试:

var test = require('tape');
var restify = require('restify');
var client = restify.createJsonClient({url: 'http://localhost:9000'});

test('GET /events/foo is 401 w/o auth', function(t) {
  client.get('/events/foo', function(err, req, res, obj) {
    t.equal(res.statusCode, 401);
    t.end();
  });
});

我错过了什么或做错了什么?

【问题讨论】:

    标签: node.js restify node.js-tape


    【解决方案1】:

    原来问题是因为restify客户端默认使用keepalive。可以通过在构造时设置agent: false或在完成时调用client.close来禁用它。

    【讨论】:

      【解决方案2】:

      我发现如果我使用 t.plan 而不是 t.end,磁带测试更容易理解和推理。在这种情况下 t.end 仅在 client.get 回调时才被调用,这可能永远不会。例如:

      test('GET /events/foo is 401 w/o auth', function(t) {
        t.plan(1);
        client.get('/events/foo', function(err, req, res, obj) {
          t.equal(res.statusCode, 401);
        });
      });
      

      即使 client.get 从不回调,这个稍作修改的测试也会更快超时并失败。

      【讨论】:

        猜你喜欢
        • 2015-01-22
        • 1970-01-01
        • 2014-04-15
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多