При запуске всего набора тестов я получаю следующую ошибку:
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- https: //github.com/mochajs/mocha/pull/278
Однако проблема все еще сохраняется даже после удаления всех вхождений в моих тестах, связанных с HTTP и обещаниями. Все, что у меня есть, это директива Angular и спецификации контроллера, которые, похоже, не делают ничего, кроме проверки данных шаблона, директивы и логики контроллера.
Кто-нибудь знает, почему это все еще происходит, и есть ли способ лучше узнать, в чем проблема? Благодарность!
@gumatias, чтобы нам было намного проще настроить ваши тесты
спасибо за отзыв @boneskull !
На данный момент существует около 700+ спецификаций, и все они проприетарный код. Я могу предоставить один из двух похожих образцов, будет ли это полезно?
Ниже то, что у меня есть в package.json. Обновление таких библиотек, как мокко и карма-мокко, похоже, не помогло.
"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. Вызывается done()
внутри и после каждого обещания и асинхронных вызовов в тестах.
2. Убраны все спецификации, касающиеся асинхронных вызовов, обещаний, 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 spec, были медленными:
например, 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://mochajs.org/#timeouts
Если вы используете Ember, попробуйте обернуть асинхронные вызовы в Ember.run => прочтите это
У меня была такая же проблема, и Ember.run => исправил ее.
Кроме того, помните, что стрелка должна быть толстой стрелкой (я однажды допустил эту ошибку, используя -> вместо =>), это из-за области видимости javascript, прочитайте об этом, если вам интересно.
Получаю
Ошибка: превышено время ожидания 2000 мс. Для асинхронных тестов и ловушек убедитесь, что вызывается "done ()"; при возврате обещания убедитесь, что оно разрешено.
Как это исправить?
Мой код:
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
все еще для меня, почему. Ошибка: превышено время ожидания 10000 мс. Для асинхронных тестов и ловушек убедитесь, что вызывается "done ()"; при возврате обещания убедитесь, что оно разрешено
it ('должен получить доступ к пользовательскому модулю', function (done) {
any_asynchfunction () .then (function (check) {
пытаться{
assert.strictEqual (проверьте, истина, 'пользователь-администратор имеет доступ к пользовательскому модулю');
сделано();
} catch (err) {
сделано (ошибка);
}
});
});
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://mochajs.org/#timeouts
Здравствуйте, установили 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 в «тестовые» «скрипты» сработало для меня как шарм.
Спасибо!
Самый полезный комментарий
просто добавьте в свой package.json под скриптами
Тогда ты можешь просто бежать