Mocha: превышено время ожидания 2000 мс. Убедитесь, что в этом тесте вызывается обратный вызов done ().

Созданный на 26 дек. 2015  ·  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- https: //github.com/mochajs/mocha/pull/278

Однако проблема все еще сохраняется даже после удаления всех вхождений в моих тестах, связанных с HTTP и обещаниями. Все, что у меня есть, это директива 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. Обновление таких библиотек, как мокко и карма-мокко, похоже, не помогло.

"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, прочитайте об этом, если вам интересно.

ссылка на stackoverflow

Получаю
Ошибка: превышено время ожидания 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 в «тестовые» «скрипты» сработало для меня как шарм.
Спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги