2012-03-27 15 views
8

He usado qunit para escribir una serie de pruebas para el código de javascript que tengo. En este momento, por alguna razón, se ejecutará la primera prueba de mi lista, y luego se ejecutará la última prueba de la lista, seguida de la penúltima, la penúltima, la penúltima, etc. ... Es crucial para mis pruebas que las cosas se ejecutan en el orden en el que las tengo. Intenté desactivar esa opción donde qunit ejecuta primero las pruebas que fallaron la última vez, pero todavía está haciendo esto. ¿Hay alguna forma de arreglar esto?Obtener QUnit para ejecutar pruebas en orden

Respuesta

11

Primero, descubra por qué sus pruebas DEBEN ejecutarse en un orden específico. El objetivo de las pruebas unitarias es que las pruebas son atómicas y debería ser posible ejecutarlas en cualquier orden: si su suite de pruebas no es capaz de hacerlo, debe averiguar por qué, ya que puede representar un problema mayor.

Si no puede resolverlo, es posible que deba dividir su conjunto de pruebas en grupos más pequeños de pruebas hasta que encuentre el que causa el problema.

editar: Se encontró esta referencia en http://www.educatedguesswork.org/2011/06/curse_you_qunit_1.html. Aparentemente, agregar esto a su conjunto de pruebas ayudará a QUnit.config.reorder = false;

+0

No, sé por qué. Para aumentar la eficiencia. (No quiero entrar en detalles, pero a partir de ahora cada prueba tarda mucho tiempo en ejecutarse y necesito hacer las cosas lo más racionalizadas posible). Algunas pruebas se basan en los resultados de una prueba previa. Puedo hacer que todo sea atómico, pero luego todo lleva más tiempo de lo que ya es. Una vez que me pongan en una posición en la que el tiempo no importa, puedo volver a un modelo atómico, pero por ahora quiero que mis pruebas se ejecuten en el orden en que las escribí para mayor eficiencia. – user1028497

+2

@ user1028497 "Algunas pruebas dependen de los resultados de una prueba previa", entonces no tiene atomicidad; debe preparar lo que se necesita para la prueba en la prueba en sí. – unludo

+0

Estaba haciendo eso sí. Pero en este momento necesito eficiencia, y esta era la mejor manera de hacer las cosas. No quiero explicar todo, pero basta con decir que en este momento necesito que las pruebas se ejecuten en el orden en que las tengo. – user1028497

0

Quizás podría considerar colocar el código que realiza cada cómputo importante en una función que tiene una prueba al principio que verifica si el cálculo ya estaba hecho. Si el cálculo no se realiza, realice el cálculo y guarde el resultado en algún lugar. Si el cálculo ya se ha realizado, solo devuelva los resultados. De esta forma, puede tener un solo cálculo para todas las pruebas, pero aún así ser autónomo en el orden en que se realizan las pruebas.

Me puedo relacionar con los problemas de los cálculos que consumen mucho tiempo en las pruebas unitarias, pero es imperativo que el grupo de prueba pueda tomar cualquier prueba unitaria y ejecutarla como una prueba autónoma independiente. Esto es especialmente cierto cuando surge un problema crítico y debe abordarse específicamente.

Cuestiones relacionadas