cypress-io / cypress-documentation

Cypress Documentation for the Cypress App, API, Cypress Cloud, UI Coverage and Cypress Accessibility.
https://docs.cypress.io
MIT License
952 stars 1.05k forks source link

For the life of me I cant figure out how to preserve a Cookie across all tests #5498

Open gkatsanos opened 1 year ago

gkatsanos commented 1 year ago

Description

confusing documentation

URL of Issue(s)

none

Steps to replicate

I read and re-read the documentation on cy.session, the migration guide the changes of the Cypress.Cookies API and all. and I cant figure out what the syntax is - there's no example that shows how to simply persist a cookie across all test. Could you modify the docs, add an example or just comment here? (I'm happy to make a PR)

Browser

Chrome latest

Device

Additional Information

I read and re-read the documentation on cy.session, the migration guide the changes of the Cypress.Cookies API and all. and I cant figure out what the syntax is - there's no example that shows how to simply persist a cookie across all test. Could you modify the docs, add an example or just comment here? (I'm happy to make a PR)

jennifer-shehane commented 1 year ago

@gkatsanos cy.session restores cookies from a session that was captured and restores them as if those actions that set the cookie happened in the new test. There's no direct action to 'save this exact cookie to persist'.

gkatsanos commented 1 year ago

Hm, interesting, I added this:

beforeEach(() => {
  cy.setCookie(
    "CookieConsent",
    "{stamp:%27vjpVJCpe9QeDb7Ba7mmn6GE5TtAmzBnDEVA8csu2OzT/ZGu6jV7YGw==%27%2Cnecessary:true%2Cpreferences:true%2Cstatistics:true%:%27gr%27}"
  )
})

in my e2e.js file and it worked. Should this be in documentation?

Gemini-0529 commented 1 month ago

Why is localStorage's data missing in the next it block, causing a redirection to the login page. @jennifer-shehane Help me with this ( There is no code in the code to intentionally clear localStorage )

it('Login', () => {
    ......
})
it('visit user page', () => {
  // Data in localStorage is deleted, causing the jump to fail
  cy.visit('/user')
})
yashtibrewal commented 1 month ago

Why is localStorage's data missing in the next it block, causing a redirection to the login page. @jennifer-shehane Help me with this ( There is no code in the code to intentionally clear localStorage )

it('Login', () => {
    ......
})
it('visit user page', () => {
  // Data in localStorage is deleted, causing the jump to fail
  cy.visit('/user')
})

This is because cypress automatically clears all cookies before each test (it block) to ensure a clean state, unless you configure it otherwise. This behavior is part of Cypress's automatic test isolation, which helps to avoid side effects between tests.

One workaround I found is, you can have the login functionality in beforeEach block (write the login code there) so that the it blocks gets hydrated with the expected cookies, or you can set the cookies manually in the beforeEach block.

Hope this helps.