Rails assert_equal не всегда работает с DateTimes - PullRequest
7 голосов
/ 05 апреля 2011

Я получаю ошибку в своем функциональном тесте при использовании assert_equal:

  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>.

Обратите внимание, что оба показывают одинаковое время и часовой пояс.Я проверил, и они того же типа класса (ActiveSupport :: TimeWithZone).Так почему же они не равны?

Это стандартное поле DateTime в базе данных, которое, я думаю, хранится только до второго справа?

Я могу получить его, преобразовавв целые числа или используя assert_in_delta с диапазоном 1 минуты.Но было просто интересно.

Кстати, это Rails 2.3.8 и MySQL.

1 Ответ

10 голосов
/ 06 апреля 2011

Я тоже получаю ту же ошибку. Похоже, об этом сообщили в 2009 :

Я видел, как это происходило в тестах раньше - обычно это вызвано тем, что база данных имеет другое временное разрешение, чем система. Таким образом, несмотря на то, что два раза печатаются одинаково, один действительно (например) 15: 45: 32.012445362, и БД загружает обратно 15:45:32, что не сравнивается как равное.

Предлагаемое решение, которое сработало для меня:

В своих тестах вы можете попробовать принудить to_a перед сравнением; Значение usec не возвращается в представлении to_a:

...