1
resposta

[Projeto] Ficou um pouco diferente, mas fiz o meu melhor rs

describe('Jornadas de usuário aula 04 desafio', () => {
  
  let transacao ={
    tipoTransacao: 'Depósito',
    valor: '150'
  };

  
  it('Deve permitir que a pessoa usuária acesse a aplicação, realize uma transação e faça um logout', () => {
    
    cy.fixture('usuarios').as('usuarios');
    cy.get('@usuarios').then(usuario =>{
    cy.login(usuario[1].email,usuario[1].senha);
    cy.visit('/home');
    cy.location('pathname').should('eq', '/home');
    cy.contains(usuario[1].nome).should('be.visible');

    cy.getByData('select-opcoes').select(transacao.tipoTransacao);
    cy.getByData('select-opcoes').should('have.value',transacao.tipoTransacao);
    
    cy.getByData('form-input').type(transacao.valor);
    cy.getByData('realiza-transacao').click();

    cy.getByData('lista-transacoes').find('li').last().contains(transacao.valor);

    cy.window().then((win) =>{
      let userId = win.localStorage.getItem('userId');
      cy.request('GET', `http://localhost:8000/users/${userId}/transations`).
      then((response) =>{

       cy.expect(response.status).to.eq(200);
       cy.expect(response.body).is.not.empty;
       cy.expect(response.body).to.have.lengthOf.at.least(1);
       cy.expect(response.body[response.body.length - 1]).to.deep.include(transacao);

            })
          });
    });

      cy.getByData('botao-sair').click();
      cy.url().should('include','/');
      cy.contains('Experimente mais liberdade no controle da sua vida financeira. Crie sua conta com a gente!').should('be.visible');
  });

})

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Luiz! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Com o que você descreveu, gostei de ver o uso de fixture com alias, a checagem de localStorage para obter userId e a validação da jornada completa até o logout. Ponto de atenção: o endpoint transations pode estar digitado diferente do esperado (transactions). Outra melhoria: ao checar a última transação, use should('contain') para manter o padrão de asserções do Cypress.

Uma dica interessante para o futuro é usar cy.intercept para observar a chamada da API e sincronizar o teste com a resposta antes de validar a UI. Veja este exemplo:


// cypress/e2e/transacoes.cy.js
describe('transacoes', () => {
  it('valida transacao ao carregar resposta da API', () => {
    cy.intercept('GET', '**/users/*/transactions').as('getTrans');
    cy.login('email@exemplo.com', 'senha123');
    cy.visit('/home');

    cy.getByData('select-opcoes').select('Deposito');
    cy.getByData('form-input').type('150');
    cy.getByData('realiza-transacao').click();

    cy.wait('@getTrans')
      .its('response.statusCode')
      .should('eq', 200);

    cy.getByData('lista-transacoes').find('li').last()
      .should('contain', '150');
  });
});

Este trecho intercepta a requisição, espera a resposta (cy.wait) e depois valida a lista.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!