Mocha: 超过 2000 毫秒的超时。 确保在此测试中调用 done() 回调。

创建于 2015-12-26  ·  19评论  ·  资料来源: mochajs/mocha

运行整个测试套件时出现以下错误:

timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

我在 StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er#上发现了这个超级有用的回复,这里是https: //github.com/mochajs/mocha/pull/278

但是,即使删除了处理 HTTP 和 promise 的测试中的每个事件,问题仍然存在。 我现在所拥有的只是 Angular 指令和控制器规范,除了检查模板数据、指令和控制器逻辑之外,它们似乎没有做太多事情。

有谁知道为什么这种情况仍在发生,以及是否有更好的方法来确切地知道问题是什么? 谢谢!

最有用的评论

只需在脚本下添加 package.json

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

然后你可以运行

      npm test

所有19条评论

@gumatias提供更多帮助,我们需要设置您的测试

感谢@boneskull的反馈!

目前大约有 700 多个规范,它们都是专有代码。 我可以提供两个类似的样本之一,这会有帮助吗?

以下是我目前在 package.json 中的内容。 升级诸如 mocha 和 karma-mocha 之类的库似乎没有帮助。

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "~1.0.0",
  "karma-chrome-launcher": "~0.1",
  "karma-coffee-preprocessor": "~0.1.3",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "~0.1.0",
  "karma-mocha": "0.2.0",
  "karma-sinon-chai": "~0.1.1",
  "karma-spec-reporter": "~0.0.10",
  "mocha": "^2.2.5"
}

以下是我尝试进入超时将停止发生的状态(没有成功)的一些尝试。

1.在测试中的每个 promise 和 async 调用中和之后调用done()

2.删除了所有处理异步调用、promise、httpBackend 和超时的规范(以防万一)

3.升级了package.json大部分库:

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "1.0.0",
  "karma-chrome-launcher": "0.2.2",
  "karma-coffee-preprocessor": "0.3.0",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "0.1.0",
  "karma-mocha": "0.2.1",
  "karma-sinon-chai": "1.1.0",
  "karma-spec-reporter": "0.0.23",
  "mocha": "2.3.4"
}

4.删除了 karma 规范报告者抱怨速度慢的规范:
例如Chrome 39.0.2171 (Mac OS X 10.11.2) SLOW 2.457 secs: My Spec Name "before each" hook for "should display " Add My Spec" when doing something"

结果发现其他新规范都抱怨速度慢。 这可能会导致在没有真正找到根本原因的情况下删除规范。

关闭这个问题。 原来是这里描述的内存泄漏问题https://github.com/mochajs/mocha/issues/2030

也可以应用特定于测试的超时,或者使用 this.timeout(0) 一起禁用超时:

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

来源: https :

如果您使用 Ember,请尝试在 Ember.run 中包装异步调用 =>阅读此内容

我遇到了同样的问题,Ember.run => 修复了它。

另外,请记住箭头必须是粗箭头,(我曾犯过使用 -> 而不是 => 的错误)这是因为 javascript 范围,如果您有兴趣,请仔细阅读。

堆栈溢出链接

我越来越
错误:超过 2000 毫秒超时。 对于异步测试和钩子,确保调用“done()”; 如果返回 Promise,请确保它已解决。
如何解决这个问题?
我的代码是:

describe("Test Search", function() {
    it("Test Post Request", function(done) {
            chai.request(postReqURL)
            .post(postReqURL)
            .send(postReqObject)
            .end(function (err, res) {
                if (err) done(err);
                expect(res.status).to.equal(200);
                done()
            })
       });
});

@vishnu2prasadh ,您是否尝试将超时增加到超过 HTTP API 预期响应的时间? 您的测试使用done似乎是正确的。

@ScottFreeCode谢谢。 通过添加 this.timeout(10000) 解决了错误; 里面

it("Test Post Request", function(done) {
     this.timeout(10000);
});

只需在脚本下添加 package.json

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

然后你可以运行

      npm test

@elvinaze有没有办法增加 beforeEach 块中的超时限制?

只需在脚本下添加 package.json

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

然后你可以运行

      npm test

迄今为止最有用的答案👍

只需在脚本下添加 package.json

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

然后你可以运行

      npm test

仍然对我来说为什么 .Error: Timeout of 10000ms exceeded. 对于异步测试和钩子,确保调用“done()”; 如果返回 Promise,请确保它已解决

it('应该访问用户模块', function(done){
any_asynchfunction ()
尝试{
assert.strictEqual(check,true,'admin user has access user module');
完毕();
}抓住(错误){
完成(错误);
}
});
});

var any_asynchfunction = function (){
var deferred = q.defer();
// 调用异步函数,如:API 调用 (http://api.domain.com)
deferred.resolve(res);
返回 deferred.promise;
}

使用回调和承诺使用 Mocha 测试异步代码

@ashish101184不要对无关的已关闭问题添加评论!

您的问题已在文档中说明

it('should access user module', function() {
  return any_asynchfunction()
    .then(function(check) {
      assert.strictEqual(check, true, 'admin user should have access to user module');
    });
});

也可以应用特定于测试的超时,或者使用 this.timeout(0) 一起禁用超时:

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

来源: https :
您好,根据您的指导方针,已安装 botium directline3 面临错误“超过 60000 毫秒超时”,我们应该在哪个文件中添加这些行

我通过创建全局超时解决了这个问题,而不是为单个测试设置它或将配置添加到我的package.json文件中。 在我的测试文件夹下,我创建了一个文件mocha.opts 。 在文件中,我为我的测试设置了一个合理的超时跨度,例如,

--timeout 10000

我也遇到了那个错误,经过几个小时的研究和调试,我找到了根本原因。

考虑这个测试:

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function(done) {
      await delay(1000)
    })
})

当我运行测试时,我收到此错误:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

现在考虑这个稍微不同的测试,其中done参数被删除

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function() {
      await delay(1000)
    })
})

当我运行这个测试时,它通过了。

不知何故,异步函数中done参数的存在会破坏测试,即使它没有被使用,即使在测试结束时调用done()也是如此。

只需在脚本下添加 package.json

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

然后你可以运行

      npm test

添加 --timeout 10000 到 "test" "scripts" ,对我来说很有魅力。
谢谢!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

enigmatic00 picture enigmatic00  ·  3评论

smithamax picture smithamax  ·  4评论

3p3r picture 3p3r  ·  3评论

luoxi001713 picture luoxi001713  ·  3评论

Swivelgames picture Swivelgames  ·  3评论