我有一个用 Node.JS 编写的简单异步代码,它将一个字符串添加到 Redis SET 中。这是代码,它保存在一个名为 redis_ops.js 的文件中
var redis = require('redis');
exports.addUser= function(){
var client = redis.createClient();
client.on("error",function(err){
console.log('Error'+ err);
});
client.select(1);
client.sadd("users","naveen",function(err,reply){
if(err)
throw err;
return reply;
});
console.log("at the end of the adduser function")
}
由于 client.sadd 是异步的,所以包含 client.sadd 的函数会在 client.sdd 完成之前返回。这是使用 Mocha 编写的测试
var assert = require("assert");
var core = require('./redis_ops.js');
describe('COREAPI', function(){
describe('addUser', function(){
it('should return 1 if the user is added successfully', function(){
assert.equal(1,core.addUser() );
})
})
})
测试失败,因为 redis_ops 返回 undefined (无返回值),因为包含 client.sadd 的函数首先返回,异步 client.sadd 稍后返回要在 test 中断言的预期值。如何在不重复代码或不包含同一文件中的所有代码的情况下测试来自异步 client.sadd 的返回值?