Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Atualizando Dados do Usuario - teste nao roda mais de uma vez

Olá! Acredito que implementei o teste como na aula, porém quando rodo o teste mais de uma vez ele falha pois uma vez que salvo os novosDadosDeUsuario a senha é modificada. Então quando o login é efetuado novamente os valores na fixture nao functionam mais.

it.only('Deve permitir usuario atualizar seus dados', () => {
    const novoUsuario = {
      nome: faker.person.fullName(),
      senha: faker.internet.password(),
    };

    cy.fixture('usuarios').as('usuarios');
    cy.get('@usuarios').then((usuario) => {
      cy.login(usuario[0].email, usuario[0].senha);
      cy.url().should('include', '/home');
      cy.contains(usuario[0].nome).should('be.visible');
    });

    cy.getByData('app-home').find('a').eq(1).click();
    cy.url().should('include', '/minha-conta');
    cy.getByData('botao-salvar-alteracoes').should('be.disabled');

    cy.get('[name="nome"]').type(novoUsuario.nome);
    cy.get('[name="senha"]').type(novoUsuario.senha);
    cy.getByData('botao-salvar-alteracoes').should('be.enabled');
    cy.getByData('botao-salvar-alteracoes').click();

    cy.on('window:alert', (textoDoAlert) => {
      cy.expect(textoDoAlert).to.equal('Alterações salvas com sucesso!');
    });

    cy.url().should('include', '/home');

    cy.window().then((win)=>{
      expect(win.localStorage.getItem('nomeUsuario')).to.equal(novoUsuario.nome)
    })
  });

Vejo que no video o teste e rodado mais de uma vez sem problema. Como faz essa bruxaria? Valeu!

1 resposta
solução!

Olá, Felipe Augusto! Tudo bom?

Realmente depois que você fecha o teste e tenta rodar novamente ele não passa pois os dados da fixture são os antigos, e a nova senha foi alterada. Neste caso isso acontece porque estamos alterando os dados direto na API, que aí funciona como um banco de dados também, salvando os arquivos localmente no arquivo db.json.

Normalmente, o que é feito para evitar esse tipo de coisa é mockar os dados de retorno da API, fazendo uma interceptação e retornando dados que não são necessariamente os reais. Dessa forma você pode ter um controle maior do que é esperado e não altera nada no banco de dados durante a execução dos seus testes.

No curso foi feito dessa forma apenas como recurso didático para mostrar como utilizamos fixtures, faker.js e como podemos escrever testes mais completos, evitando assim a necessidade de vários arquivos menores.

Ah, e provavelmente na aula os testes passam por conta do session, que armazena as informações de login em cache e as reutiliza para repetir os testes.

Abraços e bons estudos.