我很抱歉我是编程和自动化的初学者。 我在测试运行期间不断收到此错误。我试图使用 @faker-js/faker 创建一个随机日期,并且我能够更早地做到这一点。我什至能够继续进行检查复选框的部分。
这是我的代码:
beforeEach(() => {
cy.visit("xxx")
cy.get("input[type='text']").type("[email protected]")
cy.get("input[type='password']").type("Test2023!")
cy.get("button[type='submit']").click()
cy.xpath("//span[normalize-space()='Cycle Calendar']").click()
//cy.wait(2000)
cy.xpath("//span[normalize-space()='Add New Cycle Calendar']").click()
//cy.wait(1000)
})
it("Receiving from the mobiler", () => {
//generate random start and end dates for the date picker
const startDate = faker.date.future( )
const endDate = faker.date.between(startDate, faker.date.future())
//Format date to yyyy-mm-dd
const formattedStartDate = dayjs(startDate).format('YYYY-MM-DD')
const formattedEndDate = dayjs(endDate).format('YYYY-MM-DD')
//click start date
cy.get("input[placeholder='Start date']").click({force: true}).type(formattedStartDate)
cy.get("input[placeholder='End date']").click({force: true}).type(formattedEndDate)
//checkboxes MON-SAT
cy.xpath("(//input[@type='checkbox'])[1]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[2]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[3]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[4]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[5]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[6]").check({force: true})
cy.xpath("(//input[@type='checkbox'])[7]").check({force: true})
const validDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
const validDaysCount = countValidDaysInRange(formattedStartDate, formattedEndDate, validDays)
cy.log('Number of valid days between ${formattedStartDate} and ${formattedEndDate}: ${validDaysCount}')
//cy.get("button[type='submit']").click()
//cy.xpath("//span[contains(text(),'Continue')]").click()
function countValidDaysInRange(formattedStartDate, formattedEndDate, valid) {
const start = dayjs(formattedStartDate)
const end = dayjs(formattedEndDate)
let count = 0
for (let current = start; current <= end; current.add(1,'day')) {
if (validDays.includes(current.format('dddd'))){
count++
}
}}
})
这是我在 Cypress 中收到的错误消息: 错误信息
这里的问题是,您的开始日期和结束日期颠倒了。
const startDate = faker.date.future()
const endDate = faker.date.between(startDate, faker.date.future())
由于
faker.date.between
的两个参数都是使用 faker.date.future()
创建的,因此后面的调用可能会返回比第一次调用更小的值,因此是负偏移/值。
我建议将
refDate
参数传递给后面的 future,这样 future 就在 startDate
之后。
我不确定您使用的是哪个版本,但使用 faker-js v8.4.1 可以实现以下功能:
const startDate = faker.date.future();
const endDate = faker.date.future({ refDate: startDate });
如果
future
太远了,你也可以尝试soon({refDate: startDate})
。