Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scripts automatizados nivel junior #1

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

gabriel-e2e
Copy link

Scripts Automatizados Usando Cypress - Nível Júnior, aplicação web EngageSphere.

@ldasilvaNZ11 ldasilvaNZ11 self-assigned this Oct 9, 2024
Copy link
Collaborator

@ldasilvaNZ11 ldasilvaNZ11 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parabens Gabriel pelo belo trabalho.

Conseguistes implementar testes de API e GUI muito rapidamente. Os detalhes os quais chamei a atenção serão coisas que iras desenvolver e aprender ao longo do curso da turma 3.

Um ponto o qual eu gostaria de destacar para o futuro seria de quando criares a Pull Request, podes incluir na descrição da mesma informações que ajudem o revisor a ganhar um contexto das mudanças propostas em codigo, como tambem algumas coisas que tenhas tido duvidas ou dificuldade em implementar e que talvez precisem de mais atencao do revisor 👍

Desculpe se algum feedback meu nao faça sentido, ou vai de encontro com o que tenhas aprendido, pois eu tambem estou aprendendo e evoluindo revisando o teu codigo. Nesse caso, podemos discutir o mesmo ate encontrar a solucao mais apropriada. Vamos juntos, e espero poder revisar teu codigo novamente em breve! Obrigado!

@@ -10,6 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^9.0.3",
"backend": "file:",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fala Gabriel, qual seria a necessidade dessa dependencia backend?

Acredito que ela não seja necessaria, pois a aplicacao nao necessitaria dela para rodar.

Aqui vai uma breve explicação:
No contexto de módulos npm, a principal diferença entre dependencies e devDependencies está no momento em que os pacotes são necessários:

dependencies: São os pacotes essenciais que o projeto precisa para funcionar em produção. Esses módulos são instalados quando o projeto é executado em ambientes finais, como servidores de produção ou em builds de lançamento. São usados diretamente pelo código do projeto durante a execução (ex.: React).

devDependencies: São pacotes usados apenas durante o desenvolvimento e testes do projeto. Incluem ferramentas como linters, frameworks de testes e geradores de documentação. Esses módulos não são necessários em produção e, portanto, não são instalados quando o projeto é implementado nesse ambiente, exceto se forem explicitamente requisitados.
Em resumo, dependencies são para a execução do projeto, enquanto devDependencies são para o desenvolvimento do mesmo.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Só se resolver conversas que foram ajustadas.

Esta mudança não deveria ter ocorrido e portanto, recomendo reverter a mudança.

O mesmo vale para o arquivo backend/package-lock.json.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eu apago, e essa linha simplesmente volta sozinha

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Outro aluno teve o mesmo problema devido a uma extensão da RedHad no VSCode.

Você possui tal extensão instalada? Caso sim, tente desisntalar e veja se resolve o problema.

@@ -30,5 +30,8 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"dependencies": {
"EngageSphere-Test-Design-Masterclass-Turma-3": "file:"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui o mesmo principio se aplicaria novamente, nao seria necessario estabelecer isso como uma dependencia.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesma coisa aqui.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eu apaguei, mas ele retorna, misteriosamente. Dei uma pesquisada parece algum plugin faz isso não sei dizer com certeza

@@ -2,6 +2,7 @@
"name": "frontend",
"version": "0.1.0",
"dependencies": {
"frontend": "file:",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui tambem, eu removeria esse dependencia pois ela nao se enquadra na seguinte definicao:

dependencies: São os pacotes essenciais que o projeto precisa para funcionar em produção. Esses módulos são instalados quando o projeto é executado em ambientes finais, como servidores de produção ou em builds de lançamento. São usados diretamente pelo código do projeto durante a execução (ex.: React).

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De novo. Só resolva conversas onde a sugestão foi implementada.

Como este não é o caso, o review do @ldasilvaNZ11 ainda vale.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eu apaguei, mas ele retorna, misteriosamente. Dei uma pesquisada parece algum plugin faz isso não sei dizer com certeza

cypress/support/e2e.js Outdated Show resolved Hide resolved
cypress/support/commands.js Show resolved Hide resolved
cypress/e2e/api.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
package.json Show resolved Hide resolved
Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fazer os ajustes conforme sugeridos pelo @ldasilvaNZ11.

Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Além dos review do @ldasilvaNZ11, deixei mais alguns pontos de melhoria os quais creio que lhe ajudarão a melhorar o design dos testes.

cypress.config.js Outdated Show resolved Hide resolved
cypress/e2e/api.cy.js Show resolved Hide resolved
cypress/e2e/api.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
@gabriel-e2e gabriel-e2e requested a review from wlsf82 October 16, 2024 20:38
@gabriel-e2e gabriel-e2e reopened this Oct 18, 2024
Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gabriel-e2e, parabéns por mais uma rodada de testes com vários ajustes! 👏🏻

Deixei mais alguns comentários os quais creio que lhe ajudarão a melhorar ainda mais o design do testes.

Lembre-se de só enviar os ajustes para nova revisão após o encontro de amanhã. 😉

@@ -10,6 +10,7 @@
},
"dependencies": {
"@faker-js/faker": "^9.0.3",
"backend": "file:",
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Só se resolver conversas que foram ajustadas.

Esta mudança não deveria ter ocorrido e portanto, recomendo reverter a mudança.

O mesmo vale para o arquivo backend/package-lock.json.

cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/e2e/e2e.cy.js Outdated Show resolved Hide resolved
cypress/fixtures/clientes.json Show resolved Hide resolved
cypress/support/commands.js Show resolved Hide resolved
@@ -2,6 +2,7 @@
"name": "frontend",
"version": "0.1.0",
"dependencies": {
"frontend": "file:",
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De novo. Só resolva conversas onde a sugestão foi implementada.

Como este não é o caso, o review do @ldasilvaNZ11 ainda vale.

@@ -30,5 +30,8 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"dependencies": {
"EngageSphere-Test-Design-Masterclass-Turma-3": "file:"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesma coisa aqui.

Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muito bem @gabriel-e2e! 👏🏻

Deixei mais alguns comentários, os quais espero que agreguem ao seu conhecimento de design de testes automatizados.

Espero que tenha gostado da experiência de revisão de código da Test Design Masterlclass da TAT.

@@ -11,6 +11,7 @@
/cypress/downloads
/cypress/screenshots
/cypress/videos
/cypress/fixtures
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta pasta não deve ser adicionada ao .gitignore.

A pasta cypress/fixtures/ é parte da estrutura de pastas do Cypress e portanto não deve ser adicionada aqui.

Se você não estiver a utilizando, basta deletá-la e adicionar a configuração fixturesFolder: false no arquivo de configurações do Cypress (cypress.config.js).

})

it('Retorna à lista de clientes ao clicar no botão "Voltar"', () => {
cy.contains('button', 'View').should('be.visible').click()
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Para simplificar, você pode remover a verificação intermediária.

Suggested change
cy.contains('button', 'View').should('be.visible').click()
cy.contains('button', 'View').click()

O Cypress já espera por elementos estarem visíveis antes de clicar neles, portanto, use tal abordagem somente quando necessário.

O mesmo vale para a linha abaixo.

})

it('Abre e fecha o messenger', () => {
cy.get('button[class^="Messenger_openCloseButton"]').should('be.visible').click()
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Visto que você repete o seletor starts with em vários testes, que tal criar um comando customizado chamado getByClassThatStartsWith?

O mesmo seria implementado assim:

Cypress.Commands.add('getByClassThatStartsWith', classPart => {
  cy.get(`[class^="${classPart}"]`)
})

E então, seria usado assim:

cy.getByClassThatStartsWith('Messenger_openCloseButton')


it('Abre e fecha o messenger', () => {
cy.get('button[class^="Messenger_openCloseButton"]').should('be.visible').click()
cy.get('h2').should('contain', 'How can we help you?')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Veja uma alternativa mais simples.

Suggested change
cy.get('h2').should('contain', 'How can we help you?')
cy.contains('h2, 'How can we help you?').should('be.visible')

A propósito, perceba a verificação pela visibilidade do elemento.

cy.get('button[class^="Messenger_openCloseButton"]').should('be.visible').click()
cy.get('h2').should('contain', 'How can we help you?')
cy.get('button[class^="Messenger_openCloseButton"]').should('be.visible').click()
cy.get('h2').should('not.contain', 'How can we help you?')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui a verificação correta seria a seguinte:

Suggested change
cy.get('h2').should('not.contain', 'How can we help you?')
cy.contains('h2, 'How can we help you?').should('not.exist')

cy.get('button[class^="Messenger_openCloseButton"]').click()
cy.get('h2').should('contain', 'How can we help you?')
cy.get('#messenger-name').should('be.focused')
cy.get('#messenger-name').should('have.attr', 'required')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Em vez de repetir o cy.get, a linha acima podia ser assim:

cy.get('#messenger-name')
  .should('be.focused')
  .and('have.attr', 'required')

cy.get('h2').should('contain', 'How can we help you?')
cy.get('input[id="messenger-name"]').type('Seu Madruga')
cy.get('#email').type('madruguinha@gmail.com')
cy.get('#message').type('chiforinfola')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😆 chiforinfola

@@ -0,0 +1,22 @@
[
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Não vejo este fixture sendo usada em lugar nenhum.

Se este for o caso, recomendo deletá-la.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A propósito, esta não é a estrutura que o frontend espera.

A estrutura correta é esta.

cypress/support/commands.js Show resolved Hide resolved
@@ -0,0 +1 @@
import './commands'
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
import './commands'
import './commands'

Recomenda-se deixar uma linha em branco ao final de cada arquivo.

Dessa forma, ferramentas como o GitHub não exibem o ícone de No newline at end of file.

Isso é uma boa prática e convenção a ser seguida.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants