测试一个Node.js函数,该函数的返回值可以根据执行异步操作的时刻而改变
Testing a Node.js function whose return value can change depending upon the moment an asynchronous operation is permormed
我正在为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模块,它将不会通过,因为没有足够的时间连接到数据库。
是否有一种方法可以等待异步请求被执行,然后继续测试代码?
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
相关文章:
- 等待回调函数执行
- 暂停函数执行流程,直到ajax请求完成
- Bigcommerce-是否可以在函数执行后更改文本
- 如何对jquery中的未命名函数执行.call()
- 等待函数执行后再继续
- mootools类型的函数将文本作为函数执行
- 停止从另一个函数执行Javascript函数
- Jquery回调函数执行多次
- 如何使即兴 jquery 暂停当前函数执行
- JavaScript 双函数执行
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- 函数执行的次数超出预期
- JS中函数执行错误
- 为什么这个函数执行了两次
- 从子函数执行父函数;t更新父级'的属性
- 如何在jQuery函数执行's处于活动状态
- 使用javascript函数执行php文件
- jQuery函数执行顺序
- javascript中同步函数执行中的问题