Восстановить тестовую ленту

Я пытаюсь использовать ленту для тестирования 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 никогда не перезванивает.

Другие вопросы по тегам