Tengo 1 segundo jQuery .animate
acción que se inicia 5 segundos después de la carga de la página. Configuré un temporizador Sinon en mi código de prueba de la unidad Jasmine y lo compruebo después de un tic de 7 segundos para ver si las propiedades posteriores a la animación son como deberían ser.¿Cómo reproduzco una animación de jQuery con Sinon en una prueba de unidad de jazmín?
No funciona bien, así que coloqué una instancia de la animación en mi página de prueba HTML de Jasmine para ver mejor lo que está sucediendo.
En Firefox y Chrome, se carga la página, la función de animación se llama, la prueba de la unidad falla inmediatamente y, a continuación (también inmediatamente) la animación se produce visiblemente.
En IE, Opera y Safari, la página carga, se llama a la función de animación, la prueba de unidad falla inmediatamente y la animación nunca se produce de forma visible.
lo que esperaba era el siguiente (en todos los navegadores):
- Las cargas de la página, la función de animación se llama, la animación se completa de forma instantánea, y la prueba de la unidad tiene éxito inmediatamente.
En cuanto a Sinon's documentation, es temporizadores falsos cubren los siguientes procesos: setTimeout
, clearTimeout
, setInterval
, clearInterval
, Date
No sé cómo funciona la animación de jQuery, pero me imagino que está usando CSS para transición, y las transiciones CSS no están cubiertas en Sinon useFakeTimers
, así que me imagino que este es el problema. Sin embargo, si estoy en lo cierto sobre el problema, aún necesito una solución.
Tal vez debería probar algo diferente a Sinon? El waits()
de Jasmine funciona perfectamente en esta prueba, pero es increíblemente poco práctico para personas impacientes como yo.
¿Alguna otra sugerencia? Tenga en cuenta que soy nuevo en las pruebas de unidad de JS, por lo que las respuestas imprecisas me confundirán más que me ayudarán. ; o)
Ha sido un par de días y nadie ha respondido. Lo que estoy haciendo ahora, para resolver esto, es utilizar la funcionalidad de espera de Jasmine(). Ha funcionado bien, aunque las pruebas no son instantáneas sino que se completan en tiempo real. Shucks. Por favor publique cualquier otra idea que pueda tener para mí. Gracias. – gcdev
hey! ¿Encontraste alguna nueva solución a este problema? La respuesta $ .fx.off funciona perfectamente, pero todavía no es la forma en que debería ser ... –
No lo hice. He estado usando espera(). En realidad, me había olvidado de esta pregunta. Pero viendo que la solución de Derek es más simple que la de Alex y tiene varios votos a su favor (por lo que probablemente funcione para otros), lo probaré y lo marcaré como la respuesta si funciona para mí. – gcdev