2

我正在为node-redis 模块编写一个模拟并使用Jasmine对其进行测试。我为 Redis 命令的各个方面编写测试,我的目的是也能够针对原始 Redis 模块运行测试。

我的问题是:如果我对node-redis的理解正确的话,node-redis的异步函数的返回值是不同的,具体取决于命令是发送到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 回答