Даты тестирования RSpec Даты, отформатированные с помощью MomentJS - PullRequest
0 голосов
/ 27 сентября 2018

У нас возникла любопытная (временная зона?) Проблема с проверкой даты / времени в приложении Rails.

Проверяется дата created_at на объекте Rails.

На переднем крае (.html.slim страница с некоторыми AngularJS)

span.date
  | {{ comment.createdAt }}

Отображает:

2017-01-03T00:00:00.000Z

, но ...

span.date
  | {{ comment.createdAt | moment: 'MMMM Do, YYYY' }}

Отображает:

January 2nd, 2017

Мы ожидаем January 3rd, 2017

Я пытался moment.utc: 'MMMM Do, YYYY', но ничего не дает.

Мысли?

РЕДАКТИРОВАТЬ Фон для установки даты на объекте Комментарий в спецификации.

  1. Объект даты создается с Date.parse
  2. Timecop замораживает время
  3. Объект комментария являетсясозданный
  4. Comment.created_at отображается на странице, но он корректируется по местному времени (это ожидаемое поведение)

Возможно, с Timecop заморожено, есть лучший способ установить current_date так что когда momentJS thaws выходит из строя, он находится в том же часовом поясе, что и машина, на которой выполняются тесты?!?

let!(:current_date) { Date.parse('2017-01-03') }
...
background do
  Timecop.freeze(current_date)
end
...
context 'for story' do
  background do
    open_story_comments_modal

    within '.story-comments-container' do
      add_comment 'First comment message'
    end
  end
...

и в общем помощнике у нас есть

  def add_comment(text)
    fill_in 'comment[body]', with: text
    find('input[name="comment[body]"]').send_keys(:enter)

    expect(page).to have_css '.comments .comment-body', text: text
  end

1 Ответ

0 голосов
/ 27 сентября 2018

2017-01-03T00:00:00.000Z - строка даты ISO 8601.Символ Z в конце указывает, что он находится в часовом поясе UTC.В зависимости от часового пояса страны эта дата может быть 3 января или 2 января.

Сохранение даты с указанием времени и часового пояса часто является хорошей идеей, но не в некоторых крайних случаях.Если вы хотите сохранить день, вы не должны хранить время и не должны хранить часовой пояс.Строка даты без часового пояса считается находящейся во времени:

Если смещение часового пояса отсутствует, дата-время интерпретируется как местное время.

ECMAScript 2015 (6-е издание): 20.3.1.16 Формат строки даты и времени

Обратите внимание, что это изменилось с ECMAScript 2015 (6-е издание).До тех пор, пока это не было указано как противоположное:

Значение смещения отсутствующего часового пояса равно "Z".

ECMAScript 5.1 Edition / June 2011: 15.9.1.15Дата Время Формат строки

Насколько я знаю, все браузеры следовали этому изменению некоторое время назад.

...