Восстановить тестовую ленту
Я пытаюсь использовать ленту для тестирования API, созданного с помощью restify. У меня проблема в том, что тесты не заканчиваются, пока не произойдет "тайм-аут" или что-то в этом роде. Тестовый пакет просто зависает. Вот простой тест, который я использую:
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 ответа
Оказывается, проблема в том, что клиенты restify по умолчанию используют keepalive. Это можно отключить, установив agent: false
на строительство или вызов client.close
когда закончите.
Я обнаружил, что ленточные тесты легче понять и рассуждать, если я использую 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 никогда не перезванивает.