2

node-redis モジュールのモックを作成し、Jasmineを使用してテストしています。私は Redis コマンドのさまざまな側面のテストを作成しています。私の意図は、元の Redis モジュールに対してもテストを実行できるようにすることです。

私の問題: node-redis を正しく理解していれば、コマンドが Redis に送信されたか、後で送信するためにキューに入れられたか (たとえば、接続が完了した後に送信される) によって、node-redis の非同期関数の戻り値が異なります。 )。しかし、戻り値もテストしたいと思います。以下のようなテストを書くと:

it("should update value", function () {
  var client = redis.createClient();
  client.set("key", "1st");
  var value = client.get("key", function (err, data) {
    expect(err).toBeNull();
    expect(data).toBe("1st");
  });
  expect(value).toBe(true);
});

データベースに接続するのに十分な時間がないため、実際のRedisモジュールを使用すると合格しません。

コードのテストを進めるために非同期リクエストが実行されるのを待つ方法はありますか?

(この問題に対する異なるアプローチの回答も歓迎します。)

4

1 に答える 1

0

expect(err).toBeNull() == expect(value).toBe(true);非同期関数は何も返さないため (未定義)。これだけやればいい

client.set("key", "1st");
client.get("key", function (err, data) {
  expect(err).toBeNull();
  expect(data).toBe("1st");
});

しかし、待ちたい場合は、次のようなものを使用する必要があります。

var value = undefined;
client.get("key", function (err, data) {
  expect(err).toBeNull();
  expect(data).toBe("1st");
  value = true;
});
setInterval(function(){ expect(value).toBe(true); }, 10000); // wait 10 seconds for connection
于 2011-08-12T20:39:34.660 に答える