Mocha: تجاوز مهلة 2000ms. تأكد من استدعاء رد الاتصال done () في هذا الاختبار.

تم إنشاؤها على ٢٦ ديسمبر ٢٠١٥  ·  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 والوعود. كل ما لدي الآن هو توجيه 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. استدعى 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. تمت إزالة المواصفات التي كان يشكو مراسل مواصفات الكارما من أنها بطيئة:
على سبيل المثال ، 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 =>.

تذكر أيضًا أن السهم يجب أن يكون سهمًا سمينًا ، (لقد ارتكبت هذا الخطأ مرة واحدة باستخدام -> بدلاً من =>) بسبب نطاق جافا سكريبت ، اقرأه إذا كنت مهتمًا.

ارتباط مكدس

أنا أتلقى
خطأ: تجاوز مهلة 2000 مللي ثانية. بالنسبة للاختبارات غير المتزامنة والخطافات ، تأكد من استدعاء "تم ()" ؛ في حالة إعادة الوعد ، تأكد من أنه يقرر.
كيف يمكن اصلاح هذا؟
الكود الخاص بي هو:

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 للاستجابة؟ يبدو أن استخدام اختبارك لـ 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 ملي ثانية. بالنسبة للاختبارات غير المتزامنة والخطافات ، تأكد من استدعاء "تم ()" ؛ في حالة إعادة الوعد ، تأكد من أنه يقرر

it ("should access user module"، function (done) {
any_asynchfunction ()
محاولة{
assert.strictEqual (تحقق ، صحيح ، "المستخدم الإداري لديه حق الوصول إلى وحدة المستخدم") ؛
انتهى()؛
} catch (يخطئ) {
تم (يخطئ) ؛
}
}) ؛
}) ؛

var any_asynchfunction = function () {
var مؤجل = q.defer () ؛
// وظيفة Call Async مثل: استدعاء API (http://api.domain.com)
مؤجل. حل (الدقة) ؛
عودة مؤجلة الوعد.
}

اختبار الكود غير المتزامن مع 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.

الآن ضع في اعتبارك هذا الاختبار المختلف قليلاً ، حيث تتم إزالة الوسيطة المنجزة :

const delay = require('delay')

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

عندما أجري هذا الاختبار ، فإنه يمر.

بطريقة ما ، يؤدي وجود الوسيطة المنجزة في الدالة غير المتزامنة إلى كسر الاختبار ، حتى لو لم يتم استخدامها ، وحتى إذا تم إجراؤها () يتم استدعاؤها في نهاية الاختبار.

فقط أضف 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 التقييمات