Javascript 测试Node.js函数,该函数的返回值可能会随着异步操作的变化而变化

Javascript 测试Node.js函数,该函数的返回值可能会随着异步操作的变化而变化,javascript,asynchronous,node.js,redis,jasmine,Javascript,Asynchronous,Node.js,Redis,Jasmine,我正在为编写一个模拟,并使用它进行测试。我为Redis命令的各个方面编写测试,我的目的是能够针对原始Redis模块运行测试 我的问题是:如果我正确理解了node redis,node redis的异步函数的返回值会有所不同,这取决于发送给redis的命令或排队等待稍后发送的命令(例如,连接完成后发送的命令)。但是我也想测试返回的值,如果我编写了如下测试: it("should update value", function () { var client = redis.createClie

我正在为编写一个模拟,并使用它进行测试。我为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);
});
如果我使用RealRedis模块,它将不会通过,因为将没有足够的时间连接到数据库

是否有一种方法可以等待执行异步请求,然后继续测试代码

(也欢迎使用不同方法回答此问题。)

expect(err).toBeNull()==expect(value).toBe(true)因为异步函数不返回任何内容(未定义)。你只应该这样做

client.set(“key”、“1st”);
client.get(“key”),函数(err,data){
expect(err.toBeNull();
预期(数据)。toBe(“第一”);
});
但如果您想等待,您应该使用以下内容:

var值=未定义;
client.get(“key”),函数(err,data){
expect(err.toBeNull();
预期(数据)。toBe(“第一”);
值=真;
});
setInterval(函数(){expect(value).toBe(true);},10000);//等待10秒钟以进行连接
expect(err).toBeNull()==expect(value).toBe(true)因为异步函数不返回任何内容(未定义)。你只应该这样做

client.set(“key”、“1st”);
client.get(“key”),函数(err,data){
expect(err.toBeNull();
预期(数据)。toBe(“第一”);
});
但如果您想等待,您应该使用以下内容:

var值=未定义;
client.get(“key”),函数(err,data){
expect(err.toBeNull();
预期(数据)。toBe(“第一”);
值=真;
});
setInterval(函数(){expect(value).toBe(true);},10000);//等待10秒钟以进行连接

我同意你的第一点,并将以这种方式编写我的代码。然而,我在嘲笑一个图书馆,而不是写我自己的。我试图模拟原始API的各个方面。我最终可以放弃模拟返回值,但如果我能找到解决方案,这不是我的本意。向下投票与OPs问题无关,即如何创建RedisClient/redis模块的jasmine模拟。我同意你的第一点,并将以这种方式编写我的代码。然而,我在嘲笑一个图书馆,而不是写我自己的。我试图模拟原始API的各个方面。我最终可以放弃模拟返回值,但如果我能找到解决方案,这不是我的意图。向下投票,因为它与OPs问题无关,即如何创建RedisClient/redis模块的jasmine模拟。