Angular.js: Las pruebas unitarias fallan cuando se ejecutan en Australia

Creado en 19 nov. 2013  ·  14Comentarios  ·  Fuente: angular/angular.js

Recibo el mismo error informado en este comentario: https://github.com/angular/angular.js/pull/3474#issuecomment -23241136

También estoy en Australia / Sydney.

Pude saltarme con --force , ¡pero sería bueno tener un certificado de salud limpio por contribuir!

Chrome 31.0.1650 (Mac OS X 10.9.0) ngMock TzDate should fake getHours method FAILED
    Expected 4 to be 3.
    Error: Expected 4 to be 3.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:60:29)
    Expected 1 to be 0.
    Error: Expected 1 to be 0.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:64:29)
    Expected 22 to match 21.
    Error: Expected 22 to match 21.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:68:29)
ngMock moderate investigation broken expected use bug

Comentario más útil

Obtengo un seguimiento de pila similar cuando ejecuto las pruebas en Australia:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(con toda seriedad, me asigné el problema a mí mismo y lo revisaré)

Todos 14 comentarios

¿Quizás deberíamos agregar información de geolocalización a las solicitudes de extracción?

Obtengo un seguimiento de pila similar cuando ejecuto las pruebas en Australia:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(con toda seriedad, me asigné el problema a mí mismo y lo revisaré)

Estoy dispuesto a encargarme de esto en persona si se me puede pagar un viaje a Australia :)

Mismo problema en Nueva Zelanda.

No entiendo muy bien por qué es este el caso. El simulacro de TzDate está diseñado específicamente para ser independiente de la zona horaria.

Calculamos el desplazamiento en función de su configuración local y luego ajustamos la fecha para que sea la misma en todas las zonas horarias. Ver: https://github.com/angular/angular.js/blob/547871e779f7a1e340c03296405735415764a0e8/src/ngMock/angular-mocks.js#L647 -L649

No entiendo por qué esto funciona bien en todas las zonas horarias excepto en Australia y Nueva Zelanda. ¿Algunas ideas?

@IgorMinar ¡ hola desde el futuro! Dado el apagado por uno, esto parece ser un problema de horario de verano (las pruebas pasan si me mudara a Brisbane, donde no practican el horario de verano). Gracias por el puntero, esa fue una pista útil. Prepararé una solicitud de extracción.

En realidad, en una investigación más profunda, esto no parece un error en las pruebas angulares, quizás un problema nativo. El horario de verano comenzó en Australia en 1971, por lo que la época de UNIX fue a las 10:00 UTC + 10, 1/1/70.

Sin embargo, en las pruebas que utilizan un desplazamiento negativo como estos, se obtiene una zona horaria de +11 en lugar de +10. Esto también se puede ver en el nodo:

$ node
> new Date(0)
Thu Jan 01 1970 10:00:00 GMT+1000 (EST)
> new Date(-36000000)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1)
Thu Jan 01 1970 00:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1, 1, 0, 0)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)

Los resultados parecen variar enormemente en condiciones que no puedo controlar: Safari se equivoca incluso para la nueva Fecha (0), y algunas condiciones que no puedo reproducir tienen algunas pestañas de Chrome (pero no nuevas como en karma) haciéndolo bien .

Hay una solución alternativa: cambiar las pruebas para convertir fechas que no se volverán negativas. Es un poco torpe, pero no parece invalidar las pruebas, ¿es de esperar que sea aceptable?

Creo que esto se debe a ES5 15.9.1.8 (https://es5.github.io/#x15.9.1.8).

"La implementación de ECMAScript no debería intentar determinar si la hora exacta estaba sujeta al horario de verano, sino solo si el horario de verano habría estado en vigor si el algoritmo actual del horario de verano se hubiera utilizado en ese momento. Esto evita complicaciones como teniendo en cuenta los años en que la localidad observó el horario de verano durante todo el año.

Si el entorno de host proporciona la funcionalidad para determinar el horario de verano, la implementación de ECMAScript es libre de asignar el año en cuestión a un año equivalente (el mismo año bisiesto y el mismo día de la semana de inicio para el año) para el que el entorno de host proporciona información del horario de verano. La única restricción es que todos los años equivalentes deben producir el mismo resultado ".

Los diferentes motores JS manejan las fechas <1970 de manera diferente cuando se trata del ajuste de la zona horaria local. Algunos motores mapean <1970 a años más modernos, lo que explicaría por qué está viendo la fecha en que se aplicó el horario de verano a pesar de que Australia no observó el horario de verano en ese momento.

Ver: https://bugzilla.mozilla.org/show_bug.cgi?id=351066#c20 y https://bugzilla.mozilla.org/show_bug.cgi?id=1029923

+1

LOL lo siento)

Vine aquí de HN.YC. ¡Esto es divertido! : D lol

+1 - ¡El mejor informe de errores de todos los tiempos!

+1 Australia obtuvo un resumen en bucle.

Parece ser un problema con la especificación, obviamente, la pregunta es cómo se debe solucionar, ya que la especificación ECMAscript establece que el DST de hoy debe aplicarse a años anteriores, mientras que otros lenguajes de programación, y especialmente los usuarios, esperan un comportamiento diferente.

Alguien tendría que escribir un contenedor alrededor de Date que implemente correctamente los datos DST anteriores y solucione, por lo tanto, el problema, o se debe encontrar una solución diferente. No sé cuál sería preferible, pero para un usuario, la solución actual es definitivamente confusa.

¿Fue útil esta página
0 / 5 - 0 calificaciones