Mocha: excedido el tiempo de espera de 2000ms. Asegúrese de que se llame a la devolución de llamada done () en esta prueba.

Creado en 26 dic. 2015  ·  19Comentarios  ·  Fuente: mochajs/mocha

Recibo el siguiente error al ejecutar todo el conjunto de pruebas:

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

Encontré esta respuesta súper útil en StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing- while-calling-asynchronous-function-how-to-avoid-the-timeout-er# y aquí https: //github.com/mochajs/mocha/pull/278

Sin embargo, el problema persiste incluso después de eliminar todas las ocurrencias en mis pruebas que tratan con HTTP y promesas. Todo lo que tengo ahora son las especificaciones de la directiva Angular y el controlador que no parecen hacer mucho más que verificar los datos de la plantilla, la directiva y la lógica del controlador.

¿Alguien sabe por qué sigue sucediendo esto y si hay una mejor manera de saber exactamente cuál es el problema? ¡Gracias!

Comentario más útil

simplemente agregue su package.json en scripts

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

Entonces puedes simplemente correr

      npm test

Todos 19 comentarios

@gumatias para ser de mucha más ayuda, necesitaríamos configurar tus pruebas

¡Gracias por los comentarios @boneskull !

Hay alrededor de 700 especificaciones en este momento y todas son código propietario. Puedo proporcionar una de dos muestras similares, ¿sería útil?

A continuación se muestra lo que tengo actualmente en package.json. Actualizar bibliotecas como mocha y karma-mocha no pareció ayudar.

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

A continuación se muestran algunos de mis intentos de llegar a un estado en el que los tiempos de espera dejarían de ocurrir (sin éxito).

1. Llamado done() dentro y después de cada promesa y llamadas asíncronas en las pruebas

2. Se eliminaron todas las especificaciones relacionadas con llamadas asíncronas, promesas, httpBackend y tiempo de espera (por si acaso)

3. Actualización de la mayoría de las bibliotecas en 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. Se eliminaron las especificaciones de que el reportero de especificaciones de karma se quejaba de que eran lentas:
por ejemplo, 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"

Resultó que otras especificaciones nuevas se quejaban de que eran lentas. Esto probablemente podría llevar a eliminar especificaciones sin encontrar realmente la causa raíz.

Cerrando este tema. Resultó ser un problema de fuga de memoria descrito aquí https://github.com/mochajs/mocha/issues/2030

También se pueden aplicar tiempos de espera específicos de la prueba, o el uso de this.timeout (0) para deshabilitar los tiempos de espera todos juntos:

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

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

Si está utilizando Ember, intente ajustar las llamadas asíncronas en Ember.run => lea esto

Tuve el mismo problema y Ember.run => lo solucionó.

Además, recuerde que la flecha tiene que ser una flecha gruesa, (cometí ese error una vez al usar -> en lugar de =>) es debido al alcance de JavaScript, lea sobre ello si está interesado.

enlace stackoverflow

Estoy consiguiendo
Error: se superó el tiempo de espera de 2000 ms. Para pruebas asíncronas y ganchos, asegúrese de que se llame a "done ()"; si devuelve una Promesa, asegúrese de que se resuelva.
¿Cómo arreglar esto?
Mi codigo es:

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

Hola @ vishnu2prasadh , ¿ha intentado aumentar el tiempo de espera a más tiempo de lo que se espera que la API HTTP tarde en responder? El uso de done su prueba parece ser correcto.

@ScottFreeCode gracias. Error resuelto agregando this.timeout (10000); dentro

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

simplemente agregue su package.json en scripts

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

Entonces puedes simplemente correr

      npm test

@elvinaze ¿hay alguna manera de aumentar los límites de tiempo de espera en el bloque beforeEach?

simplemente agregue su package.json en scripts

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

Entonces puedes simplemente correr

      npm test

la respuesta más útil hasta ahora 👍

simplemente agregue su package.json en scripts

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

Entonces puedes simplemente correr

      npm test

todavía para mí por qué .Error: Se excedió el tiempo de espera de 10000ms. Para pruebas asíncronas y ganchos, asegúrese de que se llame a "done ()"; si devuelve una promesa, asegúrese de que se resuelva

it ('debería acceder al módulo de usuario', función (hecho) {
any_asynchfunction () .then (función (comprobar) {
tratar{
assert.strictEqual (check, true, 'el usuario administrador tiene acceso al módulo de usuario');
hecho();
} atrapar (err) {
hecho (err);
}
});
});

var any_asynchfunction = function () {
var diferido = q.defer ();
// Llamar a la función Async como: llamada API (http://api.domain.com)
deferred.resolve (res);
retorno diferido.promise;
}

Prueba de código asincrónico con Mocha usando devoluciones de llamada y promesas

@ ashish101184 , ¡no agregue comentarios a problemas cerrados no relacionados!

Su problema fue explicado en la documentación .

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

También se pueden aplicar tiempos de espera específicos de la prueba, o el uso de this.timeout (0) para deshabilitar los tiempos de espera todos juntos:

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

fuente: https://mochajs.org/#timeouts
Hola, he instalado botium directline3 frente al error 'Se excedió el tiempo de espera de 60000ms' según sus pautas en qué archivo deberíamos agregar estas líneas

Resolví esto creando un tiempo de espera global en lugar de configurarlo para pruebas individuales o agregar la configuración a mi archivo package.json . Debajo de mi carpeta de prueba, creé un archivo mocha.opts . En el archivo, establezco un intervalo de tiempo de espera razonable para que se ejecuten mis pruebas, por ejemplo,

--timeout 10000

También recibí ese error y, después de varias horas de investigación y depuración, encontré la causa raíz.

Considere esta prueba:

const delay = require('delay')

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

Cuando ejecuto la prueba, obtengo este error:

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

Ahora considere esta prueba ligeramente diferente, donde se elimina el argumento hecho :

const delay = require('delay')

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

Cuando ejecuto esta prueba, pasa.

De alguna manera, la presencia del argumento hecho en la función asíncrona interrumpe la prueba, incluso si no se usa, e incluso si se llama a done () al final de la prueba.

simplemente agregue su package.json en scripts

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

Entonces puedes simplemente correr

      npm test

Agregar --timeout 10000 a los "scripts" de "prueba", funcionó como un encanto para mí.
¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones