testing一个Node.js函数,它的返回值可以根据执行asynchronous操作的时间而改变

我正在为node-redis模块编写一个模拟器,并使用Jasmine来testing它。 我为Redis命令的各个方面编写testing,我的意图是能够对原始Redis模块运行testing。

我的问题是: 如果我正确理解node-redisnode-redis的asynchronous函数的返回值是不同的,这取决于命令发送到Redis或排队等待稍后发送(例如,在连接完成后发送)。 但是我也想testing返回值,如果我写一个如下所示的testing:

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模块,它将不会通过,因为没有足够的时间连接到数据库。

有没有办法等待asynchronous请求被执行以继续testing代码?

(对这个问题采取不同的解决方法也是受欢迎的。)

expect(err).toBeNull() == expect(value).toBe(true); 因为asynchronous函数没有返回(未定义)。 你只应该这样做

 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