解决磁带测试挂起

时间:2014-02-16 15:09:44

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

我正在尝试使用磁带来测试使用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();
  });
});

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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从不回调,这个稍微修改过的测试会更快超时并失败。