Home > OS >  how to dynamic select today date in cypress.command()?
how to dynamic select today date in cypress.command()?

Time:08-30

I have a command where I can enter a specific date for start date, please see below a part of the command I am using.

cy.commands

and when I am calling it in the test I need to enter a dynamic date like today <=( 30 days)

cy.create123((new Date().getDate() - 1), '2023-08-07')

ofc it did not work, but I have no idea how can I do it. How I can setup to cy.command to get always today-1 as startDate!

My issue is to make the dynamic enter date to work on Cypress.Commands()

CodePudding user response:

You can do something like this. Instead of subtracting 1, I am decreasing the day with 24 hours.

cy.create123(new Date(Date.now() - (3600 * 1000 * 24)).getUTCDate(), '2023-08-07')

Considering today is 29 Aug, this will give the output as 28.

date

To get the date in the format yyyy-mm-dd use:

new Date(Date.now() - ( 3600 * 1000 * 24)).toISOString().slice(0, 10)

date formatted

CodePudding user response:

TLDR

Install dayjs and use

const startDate = dayjs().add(-1, 'day').format('YYYY-MM-DD')

cy.create123(startDate, '2023-08-07')

The Custom Command and the cy.request() inside it are expecting the date as a string type.

Your calculated dynamic date (new Date().getDate() - 1) is giving you a number type.

But .toISOString() only works on Date types, not number types.

So after doing math on the Date(), you get a number which must be converted into a Date and then into a string.

const today = new Date()
const yesterday = new Date(today.setDate(today.getDate() -1))
const startDate = yesterday.toISOString()

But even that's not the end of the problems, because the timezone might give you invalid dates.

I recommend using dayjs as shown above.

  • Related