赛普拉斯的时间比较

Time comparison in Cypress

当我需要检查上午 11 点是下午 1 点之前 2 小时时出现问题,因为我的代码将差异设为 10。(11 对 1)因为我们有 12 小时的时间。


const lines2 = text.split('\n');
const lines8 = text.split(' ');
const lines9 = text.split(':', 1); // here is where I split it only to hour.               

//same for second time
const lines4 = text.split(':', 1); 


var fromtime = dayjs().hour(lines4)
var totime = dayjs().hour(lines9)


const timedifference = (totime.diff(fromtime, "hours",));
expect(timedifference).to.equal(//value taken from another file, for example -2)

我注意到您有 dayjs 库。要处理各种解析字符串,请添加 customParseFormat 插件。

import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
dayjs.extend(customParseFormat)

您的日期字符串作为第一个参数传递到 dayjs(dateString, format),并作为第二个参数格式化。

.hours() 方法没有参数,它只提取小时部分。

我不确定你的格式到底是什么,所以这里有几个例子。
我已经排列好日期字符串和格式,这样您就可以看到模式了。

// "Standard" format
const dateString1 = '2022-05-14 10:12:54'
const date1 = dayjs(dateString1, 'YYYY-MM-DD HH:mm:ss')
const hours1 = date1.hour()
console.log(hours1)                                    // logs 10


// Dates with time in "10:12:54 AM" format
const dateString2 = '2022-05-14 10:12:54 AM'
const date2 = dayjs(dateString2, 'YYYY-MM-DD HH:mm:ss A')
const hours2 = date2.hour()
console.log(hours2)                                    // logs 10

const dateString3 = '2022-05-14 1:12:54 PM'
const date3 = dayjs(dateString3, 'YYYY-MM-DD HH:mm:ss A')
const hours3 = date3.hour()
console.log(hours3)                                    // logs 13


// Dates with time in "10AM" format
const dateString4 = '2022-05-14 10AM'
const date4 = dayjs(dateString4, 'YYYY-MM-DD HHA')
const hours4 = date4.hour()
console.log(hours4)                                    // logs 10

const dateString5 = '2022-05-14 1PM'
const date5 = dayjs(dateString5, 'YYYY-MM-DD HHA')
const hours5 = date5.hour()
console.log(hours5)                                    // logs 13


// Time-only strings
const timeString6 = '10:12:54 AM'
const date6 = dayjs(timeString6, 'HH:mm:ss A')
const hours6 = date6.hour()
console.log(hours6)                                    // logs 10

const timeString7 = '1:12:54 PM'
const date7 = dayjs(timeString7, 'HH:mm:ss A')
const hours7 = date7.hour()
console.log(hours7)                                    // logs 13

完整的格式列表是 here


我无法从你的代码中找出 fixture 文件的布局。

一般来说,不要尝试写入和读取中间值,这对您没有帮助。

如果你能控制fixture文件的格式,你应该用逗号分隔fromDatetoDate,可以用来分割行

例如,cypress/fixtures/dates.txt

2022-05-14 10:12:54 AM, 2022-05-14 1:12:54 PM
... etc

测试:

cy.readFile('cypress/fixtures/dates.txt').then((dates) => {
 
  const lines = dates.split('\n')

  lines.forEach(line => {

    const fromDateString = line.split(',')[0].trim()
    const toDateString = line.split(',')[1].trim()

    const fromDate = dayjs(fromDateString, 'YYYY-MM-DD HH:mm:ss A')
    const toDate = dayjs(toDateString, 'YYYY-MM-DD HH:mm:ss A')

    const timeDifference = toDate.diff(fromDate, "hour")
    expect(timeDifference).to.equal(expectedDifference)
  })
})

注:toDate.diff(fromDate, "hour")会产生的差异。

要与负差异进行比较,请使用反向

fromDate.diff(toDate, "hour")