Pregunta

tengo un problema con uno módulo de nodo en el que todas las pruebas funcionan localmente, en otras cajas y en Travis-CI, pero a veces, y no debido a un tiempo de espera, una sola prueba falla Travis-CI.La prueba es determinista, al menos en mi opinión, por lo que no debería fallar al azar.

He rastreado el problema hasta esta parte:

function record(rec_options) {

    //  Originaly the parameter was a dont_print boolean flag.
    //  To keep the existing code compatible we take that case into account.
    var typeof_rec_options = typeof(rec_options);
    var dont_print = (typeof_rec_options === 'boolean' && rec_options)
      || (typeof_rec_options === 'object' && rec_options.dont_print);
    var output_objects = typeof_rec_options === 'object' && rec_options.output_objects;

...

        var out = !output_objects ?
          generateRequestAndResponse(body, options, res, datas) :
          generateRequestAndResponseObject(body, options, res, datas);

Por el valor de rec_options ser { dont_print: true, output_objects: true }, var output_objects se evalúa (de nuevo sólo a veces) como false por lo que la función genera cadenas y no objetos en los que la prueba, correctamente, falla.La prueba de que la evaluación de la bandera falla se puede ver en esta construcción que arroja cadenas en lugar de objetos (también tengo una prueba para asegurar que el valor devuelto sea un objeto siempre que output_objects se especifica y eso falla también mostrando string dónde object era de esperarse).

En mi opinión esto nunca debería suceder y output_objects no se define de manera ambigua y ciertamente no al azar.Y, sin embargo, esto es exactamente lo que sucede una y otra vez.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

El problema estaba en una de las pruebas unitarias que no estaba esperando a que finalizara su llamada asíncrona antes de finalizar.Esto interferiría, según el momento, con la ejecución de otras pruebas.Esto es muy específico del módulo de nodo en cuestión (hacer muescas en) ya que se burla de las solicitudes HTTP/HTTPS y, por lo tanto, las pruebas posteriores a veces capturarían las solicitudes asíncronas de la prueba defectuosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top