运行整个测试套件时出现以下错误:
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 指令和控制器规范,除了检查模板数据、指令和控制器逻辑之外,它们似乎没有做太多事情。
有谁知道为什么这种情况仍在发生,以及是否有更好的方法来确切地知道问题是什么? 谢谢!
@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 :
我越来越
错误:超过 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" ,对我来说很有魅力。
谢谢!
最有用的评论
只需在脚本下添加 package.json
然后你可以运行