¿Cómo configurar el tiempo de espera para la prueba de trufa antes del bloque?

Estoy ejecutando mis pruebas en una cadena privada y algunas de ellas se agotan:

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

Traté de establecer el tiempo de espera para toda la prueba o para la parte anterior según la documentación de mocha:

contract("looong tests", accounts => {
   this.timeout();

o

before( done => {
   this.timeout(40000);

Recibí este error:

  1)  "before all" hook:
     TypeError: _this.timeout is not a function

Agregar el parámetro de línea de comando -t no parece tener ningún efecto:

truffle test myTest.js -t 40000
truffle test myTest.js --timeout 40000

Veo una solución pendiente antigua en truffle: https://github.com/trufflesuite/truffle/issues/261

¿Cómo puedo aumentar el tiempo de espera para la declaración anterior?

Agregar tiempo de espera a los casos de prueba individuales funciona, pero no para antes de la declaración :(

   it('one long test', () => {
        ....
    }).timeout(40000 ); 

EDITAR: tengo una solución por ahora, moví el código de antes a la primera prueba que hice sincronizar:

   it('should go to before block but can't set timeout there', done =>  {
        new Promise( async function (resolve, reject) {
          // my before code 
          resolve();
        }).then( res => {
         done();
        });
    }).timeout(40000 ); 

Respuestas (4)

Agregue esto en su archivo de configuración de Truffle ( truffle.jso truffle-config.js):

mocha: {
    enableTimeouts: false,
    before_timeout: 120000 // Here is 2min but can be whatever timeout is suitable for you.
}

Si desea conservar los tiempos de espera (e incluso configurar diferentes tiempos de espera para diferentes pruebas), simplemente siga las instrucciones aquí .

No logré que esto funcionara, siempre usa el tiempo de espera predeterminado de 120 segundos. ¿Funciona con la última versión de Truffle?
@NicolasMassart: ¿Rechazas mi respuesta y luego esperas que te ayude? ¡Esta respuesta ha estado aquí por más de un año y nadie se ha quejado (y 4 han votado por ella)! ¿Se te ha ocurrido que quizás tu problema se deba a algún otro motivo?
guau, relájate. No te voté negativo, voté negativo tu respuesta. El hecho es que su respuesta no resolvió mi problema y parece no tener ningún efecto. Entonces, si puede mostrarme que estoy equivocado, puedo eliminar el voto negativo y dejar que esta respuesta tenga más visibilidad. Y, por favor, perdóname si estabas molesto por eso, no pensé que fuera tan importante que te votaran a favor.
@NicolasMassart: Para empezar, no puedo mostrarte que estás equivocado porque no eres el autor original de la pregunta, por lo que no tengo ni idea de cómo se ve tu env, cómo se ven tus pruebas, cuál es tu Truffle configuración, cuál es su versión de Truffle, etc. Por ejemplo, podría haberlo colocado mochaen el lugar equivocado dentro de su archivo de configuración de Truffle. O posiblemente podría tener dos archivos de configuración, truffle.jso bien truffle-config.js, Truffle sería predeterminado para el primero, pero ha agregado mochaal último.
Y, por supuesto, hay muchos otros escenarios que no puedo explicar sin ver su configuración. En segundo lugar, de hecho me molesta que publique un comentario y luego rechace inmediatamente una respuesta que aparentemente ha estado allí durante bastante tiempo y ayudó a bastantes personas, ¡ninguna de las cuales se ha quejado! Así que sí, me lo pensaría dos veces antes de tomar ese camino. Sopesaría todas las opciones posibles y luego empezaría a pensar " ¿qué hice mal? " en lugar de "¿qué tiene de malo una respuesta que ha sido utilizada por la comunidad durante bastante tiempo?".
Dado github.com/trufflesuite/truffle/pull/2008 si agrega before_timeout: 20000000 junto con enableTimeouts: false, funciona. ¿Me permites editar tu respuesta?
@NicolasMassart: Sí.
¿Te parece bien la edición?
Voté porque ahora me funciona. ¿Quizás esta podría ser la respuesta aceptada?
@NicolasMassart: Creo que before_timeoutposiblemente se agregó en una versión más reciente de Mocha, utilizada por una versión más reciente de Truffle, que posiblemente esté usando (¿5.x?). Al momento de escribir esta respuesta, la versión de Truffle era 4.x.
Genial tenerlo actualizado entonces, por lo que sigue siendo una respuesta válida.

Como enmienda a la respuesta proporcionada por goodvibration: importa dónde coloca ese fragmento de código dentro de truffle.js. Para mí, solo funcionó dentro del module.exportsnivel más alto (no dentro de otras cosas como networks).

Esto es lo que funcionó para mí:

module.exports = {
  mocha: {
    enableTimeouts: false
  }
};

Las opciones para Mocha parecen tener cambios con más frecuencia de lo esperado.

A partir de Truffle v5.1.9, el Mocha utilizado es v5.2.0, y las opciones para la Mochaclase se pueden encontrar en el código fuente que se encuentra aquí: https://github.com/mochajs/mocha/blob/v5.2.0/lib /mocha.js#L83

Hay opciones como las siguientes

  • enableTimeouts- booleano, ¿Habilitar tiempos de espera?
  • timeout- número|cadena, especificar umbral de tiempo de espera de prueba (en milisegundos)
  • bail- booleano, ¿Bail después de la falla de la primera prueba?
  • retries- número, vuelva a intentar las pruebas fallidas tantas veces

La versión posterior de Truffle puede usar una versión superior de Mocha. Entonces, será mejor que verifique el cambio de opciones en la fuente de GitHub anterior cambiando las etiquetas.

no se puede acceder thisdesde una () => {}función de estilo. Si desea usar this.timeout()en el bloque anterior, debe hacer un

before(function() {
   ...
});