使用Mocha在NodeJS中对异步函数进行单元测试的正确方法是什么?

时间:2017-05-30 11:57:51

标签: node.js mocha

我需要一个关于如何测试这样的函数的非常简单的例子:

// 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之前执行,除此之外,我找不到合适的解决方案。

1 个答案:

答案 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之前,测试将无法完成