0

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

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

4

2 回答 2

2

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

于 2014-10-01T18:28:26.920 回答
1

我发现如果我使用 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 永远不会回调,这个稍作修改的测试也会更快地超时并失败。

于 2014-08-01T15:15:29.737 回答