Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

274
Visualizações
Cypress: prueba de inicio de sesión

Estoy tratando de probar un inicio de sesión exitoso por algunos tipos de usuarios. Algunos de ellos tienen un comportamiento un poco diferente. Estoy tratando de hacer esto sin copiar y pegar las mismas partes del código porque mantenerlas una por una (cada tipo de usuario en un archivo o caso diferente) fue una locura.

Tengo mi propia caja de arena de prueba, por lo que las credenciales en los archivos no pondrán la seguridad bajo ataque (¿espero?)

  1. ¿Está bien intentar crear pruebas generadas de forma más o menos dinámica?
  2. ¿Mi código es demasiado complicado y hay una manera más fácil?
  3. ¿Me estoy perdiendo algo y estoy haciendo algo/todo mal?
  4. ¿Debo dividir el último más por un "si" más para todos los casos buenos con el mismo comportamiento y, de lo contrario, solo por algo inesperado?
 const credentials = [ {userType: 'UserType1', login: 'UserType1Login', password: 'UserType1Password'}, {userType: 'UserType2', login: 'UserType2Login', password: 'UserType2Password'} //6 user types and credentials for NonExistingUser and blocked ]; describe('Checks login', () => { beforeEach('Go to Login Modal', () => { cy.visit('/'); cy.get('[data-cy=loginModalOpen]').click(); }); // dynamically create a single test for each credential obj in the list credentials.forEach(credential => { it(`Checks Authorization by ${credential.userType} user`, () => { cy.get('[data-cy=login]').type(credential.login); cy.get('[data-cy=password]').type(credential.password); cy.get('[data-cy=loginSubmit]').click(); if (credential.userType.includes('blocked')) { cy.get('[data-cy=passwordError]').should('contain', 'User blocked'); cy.url().should('not.include', '/orders/published'); } else if (credential.userType.startsWith('UserType2')) { cy.url().should('include', '/stores'); } else if (credential.userType.includes('nonExisting')) { cy.get('[data-cy=passwordError]').should('contain', 'No user with such login'); cy.url().should('not.include', '/orders/published'); } else if (credential.userType.includes('UserType1')) { cy.url().should('include', 'orders_all/published'); } else { //all other cases. cy.url().should('include', '/orders/published'); } // i have some more "it" cases for error messages, but i THINK they are ok. }): }); });
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Aunque lo que ha escrito funcionará, personalmente no me gusta este enfoque. Para mí, como regla general, si va a agregar bloques condicionales en sus casos de prueba, vale la pena dividir la prueba en casos de prueba más pequeños. Así es como habría hecho esto:

 const credentials = { UserType1: { login: 'UserType1Login', password: 'UserType1Password', }, UserType2: { login: 'UserType2Login', password: 'UserType2Password' } }; const logInTheUser = (credential) => { cy.get('[data-cy=login]').type(credential.login); cy.get('[data-cy=password]').type(credential.password); cy.get('[data-cy=loginSubmit]').click(); } describe('Checks login', () => { beforeEach('Log in the user', () => { cy.visit('/'); cy.get('[data-cy=loginModalOpen]').click(); }); it('prints error and does not redirect if user is blocked', () => { logInUser(credentials.blocked); cy.get('[data-cy=passwordError]').should('contain', 'User blocked'); cy.url().should('not.include', '/orders/published'); }); it('redirects user of type 2 to stores page', () => { logInUser(credentials.UserType2); cy.url().should('include', '/stores'); }); it('prints error and does not redirect if user does not exist', () => { loginUser(credentials.nonExisting); cy.get('[data-cy=passwordError]').should('contain', 'No user with such login'); cy.url().should('not.include', '/orders/published'); }); it('redirects user of type 1 to published orders page', () => { loginUser(credentials.UserType1); cy.url().should('include', 'orders_all/published'); }); // ...other tests });

Como puede ver, las descripciones de las pruebas también son más descriptivas y ayudan al lector a comprender a primera vista qué prueba falló.

También puede hacer lo mismo almacenando toda la información de aserción (por ejemplo, url, passwordError, etc.) en los objetos sobre los que estaba iterando, pero en ese momento, también podría crear casos de prueba separados, que son más fáciles de leer y entender lo que está pasando.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda