2011-04-05 23 views
7

consigo un error en mi prueba de funcionamiento al utilizar assert_equal:rieles assert_equal no siempre funciona con DateTime

1) [31mFailure[0m: 
test_should_allow_dealer_to_extend_offer:21 
<Thu, 14 Apr 2011 23:59:59 PDT -07:00> expected but was 
<Thu, 14 Apr 2011 23:59:59 PDT -07:00>. 

en cuenta que los dos muestran la misma hora y zona horaria. Lo revisé y son del mismo tipo de clase (ActiveSupport :: TimeWithZone). Entonces, ¿por qué no son iguales?

Es un campo estándar DateTime en la base de datos, que creo que solo se almacena en el segundo derecho?

Puedo lograr que pase convertiéndolos en enteros o usando assert_in_delta con un rango de 1 minuto. Pero solo me preguntaba.

Btw esto es Rails 2.3.8 y MySQL.

Respuesta

10

Recibo el mismo error también. Parece que este era reported back in 2009:

que he visto que esto suceda en las pruebas antes - por lo general causada por la base de datos que tiene una resolución de tiempo diferente al sistema. Por lo tanto, aunque las dos veces se impriman de forma idéntica, una es realmente (por ejemplo) 15: 45: 32.012445362 y la base de datos carga 15:45:32, que no se puede comparar como igual.

La solución sugerida, que trabajó para mí:

En sus pruebas, puede intentar coaccionar to_a antes de comparar; el valor de usec no se devuelve en la representación de to_a:

+0

to_a funcionó, gracias. Además, to_s parece funcionar. – Danny

Cuestiones relacionadas