在我的Cypress测试中,我试图将从MySQL DB检索到的日期值与UI上显示的日期进行比较。
以下是我的断言:
cy.compareDates(result[0].publishdate, companyDetails.publishedDate())result[0].publishdate是从数据库检索的值- 2022-02-14 16:45:37 (下面的expectedDate)。
companyDetails.publishedDate()是包含文本14-Feb-2022 (下面的actualDate)的UI元素。
下面是我的compareDates()函数:
Cypress.Commands.add('compareDates', (expectedDate, actualDate) => {
actualDate.then(date => {
const reformattedDate = new Date(date.text())
cy.log('reformat: ' + reformattedDate)
cy.log('ISO string: ' + reformattedDate.toISOString().split('T')[0])
// expect(reformattedDate.toISOString().split('T')[0]).to.equal(expectedDate.split('T')[0])
})
})我已注释掉的断言返回此失败:

下面是正在使用的值:
改格式日期:2015年9月11日星期五: 00:00:00 GMT+0100 (英国夏季时间) ISO字符串: 2015-09-10
奇怪的是,该函数使用的日期如下:
改格式日期:2007年2月28日星期三00:00:00 GMT+0000 (格林威治标准时间) ISO字符串: 2007-02-28
发布于 2022-10-21 09:55:48
回到原来的问题
在我的Cypress测试中,我试图将从MySQL DB检索到的日期值与UI上显示的日期进行比较。 UI上出现的值是
14-Feb-2022。 数据库中的值是2022-02-14 16:45:37。
因为它们都是字符串(来自注释),所以可以使用日将它们与较少的麻烦进行比较。
基本上,dayjs非常擅长将日期字符串解析为date对象(不过,文档有点简单)。
例如:
const dayjs = require('dayjs')
it('tests my dates', () => {
const dateFromUI = dayjs('14-Feb-2022')
const dateFromDb = dayjs('2022-02-14 16:45:37')
console.log(dateFromField, dateFromDb)
})您可以从dayjs(myDateString)获得对象,这些对象具有日期的每个部分的属性。
因此,如果您想比较年、月、日和忽略时间
expect(dateFromUI.$y).to.eq(dateFromDb.$y)
expect(dateFromUI.$M).to.eq(dateFromDb.$M)
expect(dateFromUI.$D).to.eq(dateFromDb.$D)还有其他方法来进行比较,例如,$d属性具有字符串表示形式Mon Feb 14 2022 16:45:37,您可以进行子字符串比较以忽略时间部分。
或者有diff方法,例如:
dateFromUI.isSame(dateFromDb, 'day') // returns truehttps://stackoverflow.com/questions/74151652
复制相似问题