如何使用mocha使用'done();'进行异步测试?

时间:2014-01-16 23:34:02

标签: javascript node.js testing asynchronous mocha

我正在尝试使用asynchronous调用mocha来编写done();测试。到目前为止,这是我的代码。

it('should have data.', function () {
    db.put(collection, key, json_payload)
        .then(function (result) {
            result.should.exist;
            done();
        })
        .fail(function (err) {
            err.should.not.exist;
            done();
        })
})

然而,结果是代码只执行而不等待用于then,或者无法实际返回结果。 done();是否需要位于代码中的其他位置?

还在这里发布了整个回购:https://github.com/Adron/node_testing_testing

2 个答案:

答案 0 :(得分:5)

如果你想要一个异步测试,你需要处理完成参数

it('should have data.', function (done) {
    db.put(collection, key, json_payload)
        .then(function (result) {
            result.should.exist;
            done();
        })
        .fail(function (err) {
            err.should.not.exist;
            done();
        })
})

如果您使用Q作为承诺库,您可能希望像这样完成链。

it('should have data.', function (done) {
    db.put(collection, key, json_payload)
        .then(function (result) {
            result.should.exist;
        })
        .fail(function (err) {
            err.should.not.exist;

        })
        .done(done,done)
})

答案 1 :(得分:2)

我认为你的意思是实际调用done()回调。

it('should have data.', function () {
    db.put(collection, key, json_payload)
        .then(function (result) {
            result.should.exist;
            done();
        })
        .fail(function (err) {
            err.should.not.exist;
            done();
        })
})