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 クライアントがデフォルトでキープアライブを使用するためであることが判明しました。構築時に設定するか、終了時にagent: false呼び出すことで無効にすることができます。client.close

于 2014-10-01T18:28:26.920 に答える
1

テープ テストは、t.end よりも t.plan を使用した方が理解しやすく、推論しやすいことがわかりました。この場合、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 に答える