2012-04-01 8 views
5

Cuando se produce una excepción en mis pruebas QUnit, todo lo que va a decir es¿Cómo lograr que QUnit imprima rastreos en la excepción?

Died on test #n: message 

¿Cómo llego a imprimir una traza inversa o alguna otra información de ubicación para que pueda ver donde se produjo la excepción?

+0

El último QUnit generará líneas de origen para las excepciones que atrapó, incluso en Safari, que de otra manera es bastante malo en la generación de stack traces. –

Respuesta

5

No creo que sea posible hacer que QUnit le dé una pista de dónde ocurrió el error. Su código ha generado una excepción, que QUnit ha detectado e informado. Si marca la casilla 'notrycatch' en la parte superior de los resultados de QUnit, sus pruebas se ejecutarán nuevamente, pero esta vez QUnit no detectará la excepción. Luego, su navegador puede darle más información sobre lo que sucedió realmente, pero dependerá de cuál fue el error.

+0

No estoy ejecutando QUnit en el navegador, y no puedo encontrar la documentación para configurar la opción mediante programación. ¿Sabes cómo? –

+0

No estoy seguro si esto es útil cuando no está usando un navegador, pero agregar "? Notrycatch = true" a la URL es lo mismo que marcar la casilla de verificación. –

+4

Aceptaré esta respuesta porque fue la más cercana. Descubrí cómo hacerlo programáticamente: qunit.config.notrycatch = true; –

0

editar: Mientras contestaba esto, la sospecha surgió en mí que no era lo que quería preguntar. Así que he editado la respuesta a mostrar esto, probablemente parte más útiles, en primer lugar:

ya que escribe "Cuando se produce una excepción en mis pruebas QUnit" permítanme explicar el concepto de pruebas en un poco más de profundidad:

Primero que nada: La excepción no ocurre en sus pruebas QUnit, sino en su código. La buena noticia es: qUnit está en su caso haciendo exactamente lo que debe hacer: prueba su código, y como su código es defectuoso, su código genera una excepción cuando se lo prueba.

Como qUnit es un entorno de prueba, no es responsable de la entrega de los recorridos de excepción. Solo está ahí para verificar si la funcionalidad que implementó funciona de la manera que espera que funcione, no para rastrear errores. Para tal propósito, herramientas como FireBug o las herramientas de desarrollo de Safari son mucho más adecuadas.

Permítaseme describir un escenario:

  1. escribe una función
  2. a eliminar errores de él con (. Es decir) FireBug
  3. se escribe un caso de prueba qUnit a proove la función realmente hace lo usted quiere que lo haga - pase de pruebas
  4. (y ahora se pone interesante, porque esto es lo que realmente prueba es para) Usted agrega cierta funcionalidad adicional a su función, porque es necesario
  5. Si ha hecho todo bien, las pruebas pasan, y que pueden ser de que todo seguirá funcionando como se esperaba porque lo hacen (si los ha escrito así)

En resumen que hasta: Las pruebas no son para la depuración, sino para garantizar que las cosas funcionen de la manera que usted cree que funcionan. Si aparece un error, no escribe una prueba para resolverlo, pero escribe una prueba para reproducirlo. Luego encuentras el error, lo quitas y la prueba pasará. Si el error se reinventa más tarde (es decir, debido a cambios en el código), la prueba fallará nuevamente, e inmediatamente sabrá que el error ha regresado.

Esto puede tomarse aún más estableciendo un desarrollo basado en pruebas, donde se escriben las pruebas antes de escribir la funcionalidad. A continuación, el escenario anterior cambiaría a esto:

  1. se escribe una prueba, que describe los resultados esperados de su código
  2. escribir el código, cuando los errores aparecen a rastrear hacia abajo con (es decir.) Firebug
  3. , mientras avanza, una prueba tras otra comenzará a pasar
  4. cuando se añade una funcionalidad adicional, primero adicionales de escritura pruebas

Hay dos ventajas principales al hacerlo:

  1. puede estar seguro de que tiene las pruebas necesarias y
  2. está obligado a precisar exactamente lo que quiere que haga su código, porque de lo contrario no puede escribir las pruebas.

Pruebas felices.

edit end - respuesta original a continuación, en caso de que sea necesario.

Al utilizar QUnit no te recomiendo seguir el enfoque se muestra en el sitio de la documentación de jQuery http://docs.jquery.com/Qunit:

Para utilizar QUnit, usted tiene que incluir sus qunit.js y archivos qunit.css y proporcionar una estructura básica en HTML para la visualización de los resultados de las pruebas:

Todo lo que tiene que hacer es cargar qunit.js y archivos qunit.css, a continuación, poner este fragmento a su página para obtener información visual sobre el proceso de prueba:

<h1 id="qunit-header">QUnit example</h1> 
<h2 id="qunit-banner"></h2> 
<div id="qunit-testrunner-toolbar"></div> 
<h2 id="qunit-userAgent"></h2> 
<ol id="qunit-tests"></ol> 
<div id="qunit-fixture">test markup, will be hidden</div> 

Al hacerlo, se obtiene una consola interactiva cuidadosamente representada que muestra informes exactos sobre los resultados de la prueba. Hay una fila para cada prueba que muestra si se aprobó o no, al hacer clic en esa fila se despliegan los resultados de cada prueba individual. Esto se verá algo como esto:

qUnit test results

Para personalizar los mensajes de error qUnit espectáculos, sólo hay que añadir la cadena que se muestra a la prueba. Así que en lugar de

ok($('.testitem:first').is(':data(droppable)')) 

uso

ok($('.testitem:first').is(':data(droppable)'), 
    "testitem is droppable after calling setup_items('.testitem')"); 

hacer llegar el mensaje de error que aparece en la imagen. De lo contrario, qUnit regresa a algún mensaje de error estándar asociado con la prueba utilizada.

+1

Eso está bien, pero casi irrelevante. Su pregunta se puede responder con qunit.config.notrycatch = true; – aehlke

+0

interesante - lástima que uno tenga que cambiar de "modos" como ese - me tiene atrapado y muchos otros estoy seguro. Me pregunto si hay una manera de hacer que Qunit brinde un mejor soporte para el proceso de depuración ... –

Cuestiones relacionadas