• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

114
Views
Cypress conserva las cookies para un conjunto de pruebas completo

Estoy probando que requiere que inicies sesión mientras realizas las pruebas. Para permanecer conectado, conservo las cookies durante una ejecución de prueba.

Yo uso una función personalizada:

 Cypress.Commands.add('preserveAllCookiesOnce', () => { Cypress.Cookies.defaults({ preserve: (cookie) => { return true; } }) })

También probé

 beforeEach(function () { Cypress.Cookies.preserveOnce('session', 'YII_CSRF_TOKEN'); })

(Revisó dos veces el nombre de las cookies)

Ahora, en este caso de prueba, he incluido dos solicitudes de publicación después de iniciar sesión. Pero después de esas dos pruebas de solicitud POST, recibo un error 403 cuando intento acceder a la página nuevamente.

Si necesita más detalles, por favor hágamelo saber. Estoy tratando de mantener el código al mínimo necesario para comprender el problema:

 import {Login} from "../../pages/login/Login"; describe('test POST/client validation', () => { beforeEach(function () { cy.preserveAllCookiesOnce() }) it('log in', () => { login.goToLoginPage() login.loginCredentials(Cypress.env('userEmail'), Cypress.env('userPass')) }) it('test some stuff', function () { cy.visit(Cypress.env('url') + '/index.php?r=tc/tcSettings/index&language=de') ..... }) it('send POST/client request with incorrect values', function () { cy.request({ method: 'POST', ... }) .then(response => { expect(response.status).to.eq(400) expect(response.body.fields).to.contain({stuff}) }) }) it('send POST/client request with correct values', function () { cy.request({ ... }) .then(response => { expect(response.status).to.eq(200) }) }) it('go to clients page and assert created client', () => { cy.visit(Cypress.env('url') + '/index.php?r=client/index&language=de') }) })

Parece que conservar las cookies no funciona a través de las pruebas POST. Cuando intento acceder al sitio web en el último paso, obtengo un estado 403.

Por lo general, puedo ejecutar cualquier cantidad it instancias con el comando cy.preserveAllCookiesOnce() , así que supongo que podría tener que ver con las solicitudes POST en el medio.

Captura de pantalla de las cookies después del paso POST:

Consola de cookies

over 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

¿Es cy.preserveAllCookiesOnce() un custom command que creó en su proyecto de Cypress ? Tenga en cuenta que debe usar Cypress.Cookies.preserveOnce() en su lugar:

 beforeEach(function () { // before each test, we can automatically preserve the // 'session_id' and 'remember_token' cookies. this means they // will not be cleared before the NEXT test starts. // // the name of your cookies will likely be different // this is an example Cypress.Cookies.preserveOnce('session_id', 'remember_token'); })

Para habilitar o deshabilitar la depuración de cookies, use Cypress.Cookies.debug() .

 // Cypress will now log in the console when // cookies are set or removed Cypress.Cookies.debug(true) cy.setCookie('fakeCookie', '123ABC') cy.clearCookie('fakeCookie') cy.setCookie('fakeCookie', '123ABC') cy.clearCookie('fakeCookie') cy.setCookie('fakeCookie', '123ABC')

Puede leer más sobre la API de Cypress.Cookies aquí .

over 3 years ago · Juan Pablo Isaza Report

0

Ok, finalmente he encontrado la causa del problema. Tiene que ver con las cookies, pero no puedo explicar en absoluto qué lo causa.

En el primer paso, inicio sesión como usuario administrador. Guardo las cookies de sesión para este usuario y luego procedo a realizar las solicitudes POST.

Sin embargo, en el paso 5, cuando quiero consultar la página de clientes, de repente inicio sesión como usuario que no es administrador (una segunda cuenta de prueba que he creado para realizar pruebas con permisos que no son de administrador).

Para resumir:

 it('log in', () => { //in this step I log in as Admin }) it('test some stuff', function () { //in this step I am still logged in as Admin }) it('send POST/client request with incorrect values', function () { //still logged in as Admin }) it('send POST/client request with correct values', function () { //suddenly log in changes to non-Admin account }) it('go to clients page and assert created client', () => { //logged in as non-Admin, therefor this test fails }) })

No puedo encontrar ninguna razón en mi código por la cual el estado de inicio de sesión cambia en la prueba POST.

Pero aunque no puedo encontrar el motivo, ahora puedo solucionar el problema agregando un paso adicional antes del paso 5 que simplemente cierra la sesión y vuelve a iniciarla como usuario administrador.

Este es el código para el paso POST que hace que cambie el inicio de sesión:

 it('send POST/client request with incorrect values', function () { cy.request({ method: 'POST', url: Cypress.env('url') + '/service/clients', headers: { 'API-KEY': api_key, }, body: body1, failOnStatusCode: false }) .then(response => { expect(response.status).to.eq(400) expect(response.body.fields).to.contain({ "some stuff" }) }) })

No veo ninguna razón por la que esta solicitud deba cambiar el estado de mi sesión tbh. Además, las credenciales de inicio de sesión para el usuario que no es administrador no se usan en ninguna parte dentro de este archivo de especificaciones.

over 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error