寻找在Rails应用中测试TimeWithZone对象的呈现的最佳实践。
之所以失败,是因为至少我认为是因为我们在创建对象时传递了一个日期,并且该日期以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没有帮助。
答案 0 :(得分:1)
created_at
期望一个完整的日期和时间,而不仅仅是一个日期。我猜Rails用00:00:00将字符串日期解析为DateTime。尝试使用正确的时区创建正确的DateTime对象,并将其作为值传递。这样一来,您就不会留下Rails的内幕魔术了。