mocha测试中的异步回调

时间:2015-11-24 06:40:53

标签: javascript node.js asynchronous callback mocha

以下代码对我来说似乎不对,并且可能以更好的方式编写。

对于异步测试,mocha需要调用回调,即:done();

这是我在摩卡测试案例中的“之前”:

before(function (done) {
    get_open_db("./test/test.db")
    get_do_check_db(function() {
        done()
    })
})

在实际的代码段中,我向do_check_db添加了一个参数,即:cb(),以使完成的回调起作用。

function do_check_db(cb) {
        check_database(function(db_dates) {
            var most_recent_date = db_dates[0]["row.date_id"]
            var least_recent_date = db_dates[db_dates.length - 1]["row.date_id"]
            set_useful_dates(helpers.UsefulDates(most_recent_date, least_recent_date))
            console.log(get_useful_dates())
            if (most_recent_date != useful_dates.today_str ) {
                console.log(("Datebase not recent! Data being used is from: " + most_recent_date).red)
            } else {
                console.log("Database running with latest data!".green)
                most_recent_date = undefined
            }
            cb && cb()
        })
}

这似乎运作良好,但是,无论如何都要阻止添加回调函数?我只为mocha添加了cb才能正常运行。

1 个答案:

答案 0 :(得分:0)

您的get_do_check_db函数 是异步的,因此只需要回调才有意义。摩卡(或其他任何东西)怎么知道功能完成了?如果您不关心它在之前在第一次测试运行之前完成,那么之后直接调用done(或者根本不提供done参数)。

before(function (done) {
    get_open_db("./test/test.db")
    get_do_check_db();
    done();
})

但我怀疑你希望在第一次测试运行之前完成get_do_check_db,在这种情况下你所拥有的是完全合适的。