Mocha: batas waktu 2000 ms terlampaui. Pastikan panggilan balik done() dipanggil dalam pengujian ini.

Dibuat pada 26 Des 2015  ·  19Komentar  ·  Sumber: mochajs/mocha

Saya mendapatkan kesalahan berikut saat menjalankan seluruh rangkaian tes:

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

Saya menemukan respons yang sangat berguna ini di StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er# dan di sini https: //github.com/mochajs/mocha/pull/278

Namun, masalahnya masih tetap ada bahkan setelah menghapus setiap kejadian dalam pengujian saya yang berhubungan dengan HTTP dan janji. Yang saya dapatkan sekarang adalah direktif Angular dan spesifikasi pengontrol yang tampaknya tidak melakukan banyak hal selain memeriksa data templat, arahan, dan logika pengontrol.

Adakah yang tahu mengapa ini masih terjadi dan apakah ada cara yang lebih baik untuk mengetahui dengan tepat apa masalahnya? Terima kasih!

Komentar yang paling membantu

cukup tambahkan package.json Anda di bawah skrip

       "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
        },

Maka Anda bisa lari

      npm test

Semua 19 komentar

@gumatias untuk menjadi lebih banyak bantuan, kami perlu mengatur tes Anda

terima kasih atas umpan baliknya @boneskull !

Ada sekitar 700+ spesifikasi saat ini dan semuanya adalah kode kepemilikan. Saya dapat memberikan salah satu dari dua sampel yang serupa, apakah itu akan membantu?

Di bawah ini adalah apa yang saya miliki saat ini di package.json. Memutakhirkan perpustakaan seperti mocha dan karma-mocha tampaknya tidak membantu.

"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"
}

Di bawah ini adalah beberapa upaya saya untuk mencapai keadaan di mana batas waktu akan berhenti terjadi (tanpa hasil).

1. Memanggil done() dalam dan setelah setiap panggilan janji dan asinkron dalam pengujian

2. Menghapus semua spesifikasi yang berhubungan dengan panggilan asinkron, janji, httpBackend, dan batas waktu (untuk berjaga-jaga)

3. Upgrade sebagian besar perpustakaan di 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. Menghapus spesifikasi yang dikeluhkan oleh reporter spesifikasi karma menjadi lambat:
misalnya 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"

Ternyata spesifikasi baru lainnya mengeluh lambat. Ini mungkin dapat menyebabkan penghapusan spesifikasi tanpa benar-benar menemukan akar masalahnya.

Menutup masalah ini. Ternyata menjadi masalah kebocoran memori yang dijelaskan di sini https://github.com/mochajs/mocha/issues/2030

Timeout khusus pengujian juga dapat diterapkan, atau penggunaan this.timeout(0) untuk menonaktifkan timeout secara bersamaan:

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

sumber: https://mochajs.org/#timeouts

Jika Anda menggunakan Ember, coba bungkus panggilan async di Ember.run => baca ini

Saya memiliki masalah yang sama, dan Ember.run => memperbaikinya.

Juga, ingat panahnya harus panah yang gemuk, (saya membuat kesalahan itu sekali menggunakan -> alih-alih =>) itu karena ruang lingkup javascript, bacalah jika Anda tertarik.

tautan stackoverflow

Saya mendapatkan
Kesalahan: Batas waktu 2000 md terlampaui. Untuk pengujian dan pengait async, pastikan "done()" dipanggil; jika mengembalikan Janji, pastikan itu terselesaikan.
Bagaimana cara memperbaikinya?
Kode saya adalah:

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()
            })
       });
});

Hai @vishnu2prasadh , done pengujian Anda tampaknya benar.

@ScottFreeCode terima kasih. Kesalahan diselesaikan dengan menambahkan this.timeout(10000); dalam

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

cukup tambahkan package.json Anda di bawah skrip

       "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
        },

Maka Anda bisa lari

      npm test

@elvinaze apakah ada cara untuk meningkatkan batas waktu habis di blok beforeEach?

cukup tambahkan package.json Anda di bawah skrip

       "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
        },

Maka Anda bisa lari

      npm test

jawaban yang paling berguna sejauh ini 👍

cukup tambahkan package.json Anda di bawah skrip

       "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
        },

Maka Anda bisa lari

      npm test

masih bagi saya mengapa .Error: Timeout 10000ms terlampaui. Untuk pengujian dan pengait async, pastikan "done()" dipanggil; jika mengembalikan Janji, pastikan itu terselesaikan

itu('harus mengakses modul pengguna', fungsi(selesai){
any_asynchfunction ().
mencoba{
assert.strictEqual(centang,true,'pengguna admin memiliki modul pengguna akses');
selesai();
}tangkap(err){
selesai (salah);
}
});
});

var any_asynchfunction = fungsi (){
var ditangguhkan = q.defer();
// Memanggil fungsi Async seperti : Panggilan API (http://api.domain.com)
ditangguhkan.resolve(res);
kembali ditangguhkan.janji;
}

Menguji kode asinkron dengan Mocha menggunakan panggilan balik dan janji

@ashish101184 , jangan tambahkan komentar ke masalah tertutup yang tidak terkait!

Masalah Anda dijelaskan dalam dokumentasi .

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

Timeout khusus pengujian juga dapat diterapkan, atau penggunaan this.timeout(0) untuk menonaktifkan timeout secara bersamaan:

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

sumber: https://mochajs.org/#timeouts
Halo telah menginstal botium directline3 menghadapi kesalahan 'Waktu habis 60000 ms terlampaui' sesuai pedoman Anda di file mana kami harus menambahkan baris ini

Saya menyelesaikan ini dengan membuat batas waktu global daripada mengaturnya untuk pengujian individual atau menambahkan konfigurasi ke file package.json . Di bawah folder pengujian saya, saya membuat file mocha.opts . Dalam file tersebut, saya menetapkan rentang waktu tunggu yang wajar untuk menjalankan pengujian saya, misalnya,

--timeout 10000

Saya juga mendapatkan kesalahan itu, dan setelah beberapa jam meneliti dan men-debug, saya menemukan akar masalahnya.

Pertimbangkan tes ini:

const delay = require('delay')

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

Ketika saya menjalankan tes, saya mendapatkan kesalahan ini:

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

Sekarang pertimbangkan tes yang sedikit berbeda ini, di mana argumen yang dilakukan dihapus :

const delay = require('delay')

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

Ketika saya menjalankan tes ini, itu lulus.

Entah bagaimana, kehadiran argumen done dalam fungsi async merusak pengujian, meskipun tidak digunakan, dan bahkan jika done() dipanggil di akhir pengujian.

cukup tambahkan package.json Anda di bawah skrip

       "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
        },

Maka Anda bisa lari

      npm test

Menambahkan --timeout 10000 ke "test" "scripts" , bekerja seperti pesona bagi saya.
Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

adamhooper picture adamhooper  ·  3Komentar

eschwartz picture eschwartz  ·  3Komentar

danielserrao picture danielserrao  ·  3Komentar

robertherber picture robertherber  ·  3Komentar

smithamax picture smithamax  ·  4Komentar