Использование RSpec & Capybara для тестирования Rails 'create_at (TimeWithZone) - PullRequest
0 голосов
/ 04 октября 2018

В поисках лучшей практики при тестировании рендеринга объекта TimeWithZone в приложении Rails.

Это терпит неудачу, потому что, по крайней мере, я думаю , потому что мы пропускаем дату, когда мы создаемобъект и он хранится в БД как 2014-01-10T00:00:00.000Z.

Тем не менее, при визуализации

Но то, что проверяется, это обработанная страница, где

let(:attachment) { create :attachment, created_at: '2014-01-10' }

    background do
      user.article.attachments << [attachment]
      stub_image_convert(new_file[:url])
      stub_request(:put, new_file[:s3_request])

      visit article_path(user.article, as: user)
    end

    scenario 'uploaded files are added to the list' do
      expect(page).to have_css '.attachment-item', count: 1
      within file_group_selector(position: 1) do
        upload_date_present 'January 10, 2014'
        file_previews_present count: 1
      end
    ...
 ...

помощник:

  def upload_date_present(date)
    expect(page).to have_css 'grouped-attachments .group-title', text: date
  end

, и в конечном итоге он отображается на странице как momentJS (javascript / Angular), который отображает дату:

  newAttachment.groupDate = moment().format('LL')

и завершается ошибкой, так как я предполагаю, что это должно бытьлокальная настройка часового пояса:

Failure/Error: expect(page).to have_text 'January 10th, 2014'
   expected to find text "January 10th, 2014" in "John Snow First comment message January 9th, 2014"

Как мы должны это проверять?FWIW Timecop не помогает.

1 Ответ

0 голосов
/ 05 октября 2018

created_at ожидает полную дату со временем, а не просто дату.Я предполагаю, что Rails анализирует вашу строковую дату как DateTime с 00:00:00 как время.Попробуйте создать правильный объект DateTime с правильным часовым поясом и передайте его в качестве значения.Таким образом, вы ничего не оставляете магии под капотом, которую делает Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...