我需要一个关于如何测试这样的函数的非常简单的例子:
// Read from Redis DB
Main.prototype.readFromRedis = function(key, callback){
dbClient.get(key, function(err, reply) {
return callback(err, reply)
});
}
或者这个:
// Write to file
Main.prototype.writeToFile = function(fileName, content, callback){
fs.appendFile(fileName, content, encoding='utf8', function (err) {
return callback(err);
});
}
我一直在寻找最佳解决方案很长一段时间但却找不到任何有用的东西。
我的尝试:
describe('main', function() {
it('readFromRedis(key, callback) should read value from DB', function() {
var main = new Main();
var error;
main.readFromRedis('count',function(err){
err = error;
});
expect(error).to.equal(undefined);
});
});
然而expect()
在readFromRedis
之前执行,除此之外,我找不到合适的解决方案。
答案 0 :(得分:1)
Mocha支持异步功能(docs)。您可以使用done
表示测试结束。像这样:
describe('main', function() {
// accept done as a parameter in the it callback
it('readFromRedis(key, callback) should read value from DB', function(done) {
var main = new Main();
main.readFromRedis('count',function(err){
expect(error).to.equal(undefined);
// call done() when the async function has finished
done()
});
});
});
当您将done
作为参数传递到it
回调中时,在done
被调用或已达到timeout之前,测试将无法完成