【问题标题】:How do I use mocha to do asynchronous tests using 'done();'?如何使用 mocha 使用 'done();' 进行异步测试?
【发布时间】:2014-02-06 03:32:15
【问题描述】:

我正在尝试使用 done(); 调用编写带有 mochaasynchronous 测试。这是我目前的代码。

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();
        })
})

然而,结果是代码只是执行而不等待然后或未能实际返回结果。 done(); 是否需要在代码中的不同位置?

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

【问题讨论】:

  • 如果我错了,请纠正我,但是您传递给it调用的函数不需要done参数吗? it('should have data.', function(done) {it('should have data.', function() {.
  • @juanpaco 是的,请不要自己查看下面的答案。
  • 如果测试执行“不等待”并不意味着它是异步的?

标签: javascript node.js testing asynchronous mocha.js


【解决方案1】:

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

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 作为你的 Promise 库,你可能希望像这样完成你的链。

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)
})

【讨论】:

  • 两种都试过了...我仍然没有从 .then 或 .fail 中得到任何东西。 :-/
  • 添加了完整的 repo,这样你就可以试一试了。把一切都放进去。包括 Webstorm .idea 目录。这只是一些代码。不知道我在这里实际上在做什么。 :-/
  • 哦等等,我知道在哪里......哦,伙计,我的大脑现在扭曲了。我会得到这个 Javascript 的东西。 ;) 我第一次尝试时错过了传递给回调的“完成”。这很重要!
  • 我在这里缺少什么?使用 done 让它等待,进行同步测试,而不是异步测试。
【解决方案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();
        })
})

【讨论】:

  • 修复了 (),它只是留在了我上面粘贴的代码中。然而,这似乎并没有解决问题。 :(
  • 添加了完整的 repo,这样你就可以试一试了。把一切都放进去。包括 Webstorm .idea 目录。这只是一些代码。不知道我在这里实际上在做什么。 :-/
猜你喜欢
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多