我正在尝试使用磁带来测试使用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();
});
});
我错过了什么或做错了什么?
答案 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从不回调,这个稍微修改过的测试会更快超时并失败。