Boa tarde, Renato! Peço perdão pela demora em responder.
Pegando a versão do projeto que você disponibilizou no seu repositório, na branch "testes", identifiquei que estavam faltando algumas partes de configuração e até mesmo o teste de login feito na aula. Então, vamos passo a passo.
Para corrigir: Use o projeto que está na branch "main" como base para aplicar os passos que deixarei abaixo. Faça o clone dele com:
git clone https://github.com/NatoFernandes/voll_cypress.git
Agora, faça a instalação das dependências e inicialização para cada projeto como mostrado na aula Configurando uma URL base.
Na pasta raiz do projeto crie o arquivo "cypress.env.json". Esse arquivo terá as informações de login, como email, senha e url do login.
Imagem que ilustra a raiz do projeto onde o arquivo deve ser criado:
Estrutura Json que deve ser colada dentro do arquivo "cypress.env.json", o arquivo recem criado:
{
"email": "clinica@gmail.com",
"senha": "4321",
"api_login": "http://localhost:8080/auth/login"
}
No arquivo "cypress.config.js", você tem que adicionar a url base para o projeto Frontend. Então adicione a propriedade baseUrl: 'http://localhost:3000/', depois do objeto e2e. Abaixo segue um exemplo de como o seu código deve ficar, para caso queira apenas copiar e colar dentro do arquivo:
const { defineConfig } = require("cypress");
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
baseUrl: 'http://localhost:3000/',
video: true,
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'cypress/results',
overwrite: false,
html: true,
json: false,
timestamp: "mmddyyyy_HHMMss"
},
}
});
Acesse a pasta "cypress" e depois "suport", nela você vai entrar no arquivo "commands.js", ele por padrão vai estar apenas com comentários, então você deve apagar eles e adicionar todo o código que deixarei abaixo:
Cypress.Commands.add('login', (email, senha) => {
cy.session([email, senha], () => {
cy.visit('/login')
cy.get('[data-test="inputLoginEmail"]').type(email)
cy.get('[data-test="inputLoginSenha"]').type(senha, { log: false })
cy.get('[data-test="botaoTeste"]').should('be.visible').click()
cy.location('pathname').should('eq', '/dashboard')
})
})
Cypress.Commands.add('cadastraEspecialista', (nome, email, senha, especialidade, crm, imagem, cep, rua, numero, complemento, estado) => {
cy.visit('/dashboard')
cy.contains('Cadastrar especialista').should('be.visible').click()
cy.get('[data-test="inputEspecialistaNome"]').type(nome)
cy.get('[data-test="inputEspecialistaEmail"]').type(email)
cy.get('[data-test="inputEspecialistaSenha"]').type(senha)
cy.get('[data-test="inputEspecialistaSenhaVerificada"]').type(senha)
cy.get('[data-test="inputEspecialistaEspecialidade"]').type(especialidade)
cy.get('[data-test="inputEspecialistaCRM"]').type(crm)
cy.get('[data-test="inputEspecialistaImagem"]').type(imagem)
cy.get('[data-test="inputEspecialistaCEP"]').type(cep)
cy.get('[data-test="inputEspecialistaRua"]').type(rua)
cy.get('[data-test="inputEspecialistaNumero"]').type(numero)
cy.get('[data-test="inputEspecialistaComplemento"]').type(complemento)
cy.get('[data-test="inputEspecialistaEstado"]').type(estado)
})
Cypress.Commands.add('loginApi', (email, senha) => {
cy.request({
method: 'POST',
url: Cypress.env('api_login'),
body: {
email: email,
senha: senha
}
}).then(response => {
expect(response.status).to.eq(200);
expect(response.body.auth).to.be.true;
expect(response.body.rota).to.eq('/clinica');
expect(response.body.token).to.exist;
cy.wrap(response.body.token).as('token');
})
})
Ainda dentro da pasta "cypress" acesse agora a pasta "e2e" e crie o arquivo "login-api.cy.js", nele você vai colar o código que deixarei abaixo, que é o responsável por realizar o teste:
describe('Testes em API', () => {
//caminho feliz
context('Testes em rotas com usuário autorizado', () => {
beforeEach(() => {
cy.loginApi(Cypress.env('email'), Cypress.env('senha'))
})
it('GET via url front para teste em resposta da home', () => {
cy.request("GET", "/").should((response) => {
expect(response.status).to.eq(200);
});
});
it('Deve verificar se o token de autenticação é retornado após login via POST na API', () => {
cy.get('@token').should('exist');
});
});
})
A resposta vai continuar na próxima postagem..